Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.5 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 Kategoria:Artykuły do zintegrowania 14 4306 546169 517437 2026-06-08T18:42:41Z Persino 2851 546169 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{Śródtekst|bez preprocess=tak|klucz=artykuł|uchwyt=integracja|tekst= Zawierają {{#switch:{{{klucz|}}}|artykuł=artykuły|podręcznik=podręczniki|artykuł dla dzieci=artykuły dla dzieci|podręcznik dla dzieci=podreczniki dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}} ({{#switch:{{{klucz|}}}|artykuł|podręcznik=w przestrzeni nazw {{Np|(main)|link=tak}}|artykuł dla dzieci|podręcznik dla dzieci=w przestrzeni nazw {{Np|Wikijunior|link=tak}} bez {{lj2|Strona główna}}|jednostka użytkownika=w przestrzeni nazw {{Np|User|link=tak}}|jednostka brudnopisu projektu=w nibyprzestrzeni nazw {{lr2|Brudnopis}} w przestrzeni nazw {{Np|Wikibooks|link=tak}}|strona kategorii=w przestrzeni nazw {{Np|Category|link=tak}}|strona szablonu=w przestrzeni nazw {{Np|Template|link=tak}}|strona modułu=w przestrzeni nazw {{Np|Module|link=tak}}|strona brudnopisu szablonu=w nibyprzestrzeni nazw {{ls2|Brudnopis}} w przestrzeni nazw {{Np|Template|link=tak}}|strona brudnopisu modułu=w nibyprzestrzeni nazw {{ld2|Brudnopis}}|strona projektu=w przestrzeni nazw {{Np|Wikibooks|link=tak}} bez {{lr2|Strona główna}}|strona pomocy=w przestrzeni nazw {{Np|Help|link=tak}}}}) wymagające integracji, czyli połączenia z innymi {{#switch:{{{klucz|}}}|artykuł=artykułami|podręcznik=podręcznikami|artykuł dla dzieci=artykułami dla dzieci|podręcznik dla dzieci=podrecznikami dla dzieci|jednostka użytkownika=jednostkami użytkowników|jednostka brudnopisu projektu=jednostkami brudnopisu projektu|strona kategorii=stronami kategorii|strona szablonu=stronami szablonu|strona modułu=stronami modułów|strona brudnopisu szablonu=stronami brudnopisu projektu|strona brudnopisu modułu=stronami brudnopisu modułu|strona projektu=stronami projektu|strona pomocy=stronami pomocy}}. Aby dodać do tej kategorii, wstaw do nich szablony integracji z kategorii: {{lk|Szablony integracji i podziału}} lub {{lk|Szablony porządkowe}}, z zastosowaniem do {{#switch:{{{klucz|}}}|artykuł=artykułów|podręcznik=podręczników|artykuł dla dzieci=artykułów dla dzieci|podręcznik dla dzieci=podreczników dla dzieci|jednostka użytkownika=jednostek użytkowników|jednostka brudnopisu projektu=jednostek brudnopisu projektu|strona kategorii=stron kategorii|strona szablonu=stron szablonu|strona modułu=stron modułów|strona brudnopisu szablonu=stron brudnopisu projektu|strona brudnopisu modułu=strona brudnopisu modułu|strona projektu=stron projektu|strona pomocy=stron pomocy}}, z opcjonalnym parametrem z dodatkowym objaśnieniem, jeżeli dany szablon tego wymaga, tzn. szablony podane poniżej. == Szablony {{s|Integruj}} i {{s|Integracja}} == Szablony do integracji {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, w której są one umieszczone, {{#switch:{{{klucz|}}}|artykuł=z artykułem|podręcznik=z podręcznikiem|artykuł dla dzieci=z artykułem dla dzieci|podręcznik dla dzieci=z podrecznikiem dla dzieci|jednostka użytkownika=z jednostką użytkownika|jednostka brudnopisu projektu=z jednostką brudnopisu projektu|strona kategorii=ze stroną kategorii|strona szablonu=ze stroną szablonu|strona modułu=ze stroną modułu|strona brudnopisu szablonu=ze stroną brudnopisu projektu|strona brudnopisu modułu=ze stroną brudnopisu modułu|strona projektu=ze stroną projektu|strona pomocy=ze stroną pomocy}}: {{#switch:{{{klucz|}}}|artykuł='''Nazwa podręcznika 1/Artykuł 1''' i '''Nazwa podręcznika 2/Artykuł 2'''|podręcznik='''Nazwa podręcznika 1''' i '''Nazwa podręcznika 2'''|artykuł dla dzieci='''Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1''' i '''Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2'''|podręcznik dla dzieci='''Nazwa podręcznika dla dzieci 1''' i '''Nazwa podręcznika dla dzieci 2'''|jednostka użytkownika='''Użytkownik 1/Nazwa jednostki użytkownika 1''' i '''Użytkownik 2/Nazwa jednostki użytkownika 2'''|jednostka brudnopisu projektu='''Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1''' i '''Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2'''|strona kategorii='''Nazwa strony kategorii 1''' i '''Nazwa strony kategorii 2'''|strona szablonu='''Nazwa strony szablonu 1''' i '''Nazwa strony szablonu 2'''|strona modułu='''Nazwa strony modułu 1''' i '''Nazwa strony modułu 2'''|strona brudnopisu szablonu='''Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1''' i '''Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2'''|strona brudnopisu modułu='''Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1''' i '''Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2'''|strona projektu='''Nazwa strony projektu 1''' i '''Nazwa strony projektu 2'''|strona pomocy='''Nazwa strony pomocy 1''' i '''Nazwa strony pomocy 2'''}}. === A oto ilustracja wywołania tych szablonów === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1{{=}}Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2{{=}}Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1=Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2=Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1{{=}}Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2{{=}}Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1=Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2=Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} ==== Szablon {{s|Integracja}} ==== * Wywołanie szablonu {{s|Integracja}} jest takie samo jak do szablonu {{s|Integruj}}, bo ten pierwszy jest przekierowaniem do tego drugiego. == Szablon {{s|Integruj z}} == Szablon mówi, aby {{#switch:{{{klucz|}}}|artykuł=z tym artykułem|podręcznik=z tym podręcznikiem|artykuł dla dzieci=z tym artykułem dla dzieci|podręcznik dla dzieci=z tym podrecznikiem dla dzieci|jednostka użytkownika=z tą jednostką użytkownika|jednostka brudnopisu projektu=z tą jednostką brudnopisu projektu|strona kategorii=z tą strony kategorii|strona szablonu=z tą strony szablonu|strona modułu=z tą strony modułu|strona brudnopisu szablonu=z tą strony brudnopisu projektu|strona brudnopisu modułu=z tą strony brudnopisu modułu|strona projektu=z tą strony projektu|strona pomocy=z tą strony pomocy}}, w której jest umieszczony on, zintegrować {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}}: '''{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}'''. === A oto ilustracja wywołania tego szablonu === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj z|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} == Szablon {{s|Integruj do}} == Szablon mówi, aby {{#switch:{{{klucz|}}}|artykuł=ten artykuł|podręcznik=ten podręcznik|artykuł dla dzieci=ten artykuł dla dzieci|podręcznik dla dzieci=ten podrecznik dla dzieci|jednostka użytkownika=tę jednostkę użytkownika|jednostka brudnopisu projektu=tę jednostkę brudnopisu projektu|strona kategorii=tę stronę kategorii|strona szablonu=tę stronę szablonu|strona modułu=tę stronę modułu|strona brudnopisu szablonu=tę stronę brudnopisu projektu|strona brudnopisu modułu=tę stronę brudnopisu modułu|strona projektu=tę stronę projektu|strona pomocy=tę stronę pomocy}} w której jest umieszczony on, zintegrować {{#switch:{{{klucz|}}}|artykuł=z artykułem|podręcznik=z podręcznikiem|artykuł dla dzieci=z artykułem dla dzieci|podręcznik dla dzieci=z podrecznikiem dla dzieci|jednostka użytkownika=z jednostką użytkownika|jednostka brudnopisu projektu=z jednostką brudnopisu projektu|strona kategorii=ze stroną kategorii|strona szablonu=ze stroną szablonu|strona modułu=ze stroną modułu|strona brudnopisu szablonu=ze stroną brudnopisu projektu|strona brudnopisu modułu=ze stroną brudnopisu modułu|strona projektu=ze stroną projektu|strona pomocy=ze stroną pomocy}}: '''{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}'''. === A oto ilustracja wywołania tego szablonu === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj do|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj do|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj do|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj do|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} == Szablon {{s|Integrowanie}} == Szablonu używamy, gdy chcemy powiadomić innych wikipedystów, że właśnie trwa integracja artykułu, aby zapobiec konfliktom edycji (podobną rolę spełnia {{s|W edycji}}). === A oto ilustracja wywołania tego szablonu === A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podrecznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integrowanie|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podrecznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integrowanie|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|typ jednostki={{{klucz|}}}}}}} }} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} ksw4s48blrru4eshy83ntw0a76fzhep 546173 546169 2026-06-08T18:48:04Z Persino 2851 546173 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{Śródtekst|bez preprocess=tak|klucz=artykuł|uchwyt=integracja|tekst= Zawierają {{#switch:{{{klucz|}}}|artykuł=artykuły|podręcznik=podręczniki|artykuł dla dzieci=artykuły dla dzieci|podręcznik dla dzieci=podręczniki dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}} ({{#switch:{{{klucz|}}}|artykuł|podręcznik=w przestrzeni nazw {{Np|(main)|link=tak}}|artykuł dla dzieci|podręcznik dla dzieci=w przestrzeni nazw {{Np|Wikijunior|link=tak}} bez {{lj2|Strona główna}}|jednostka użytkownika=w przestrzeni nazw {{Np|User|link=tak}}|jednostka brudnopisu projektu=w nibyprzestrzeni nazw {{lr2|Brudnopis}} w przestrzeni nazw {{Np|Wikibooks|link=tak}}|strona kategorii=w przestrzeni nazw {{Np|Category|link=tak}}|strona szablonu=w przestrzeni nazw {{Np|Template|link=tak}}|strona modułu=w przestrzeni nazw {{Np|Module|link=tak}}|strona brudnopisu szablonu=w nibyprzestrzeni nazw {{ls2|Brudnopis}} w przestrzeni nazw {{Np|Template|link=tak}}|strona brudnopisu modułu=w nibyprzestrzeni nazw {{ld2|Brudnopis}}|strona projektu=w przestrzeni nazw {{Np|Wikibooks|link=tak}} bez {{lr2|Strona główna}}|strona pomocy=w przestrzeni nazw {{Np|Help|link=tak}}}}) wymagające integracji, czyli połączenia z innymi {{#switch:{{{klucz|}}}|artykuł=artykułami|podręcznik=podręcznikami|artykuł dla dzieci=artykułami dla dzieci|podręcznik dla dzieci=podręcznikami dla dzieci|jednostka użytkownika=jednostkami użytkowników|jednostka brudnopisu projektu=jednostkami brudnopisu projektu|strona kategorii=stronami kategorii|strona szablonu=stronami szablonu|strona modułu=stronami modułów|strona brudnopisu szablonu=stronami brudnopisu projektu|strona brudnopisu modułu=stronami brudnopisu modułu|strona projektu=stronami projektu|strona pomocy=stronami pomocy}}. Aby dodać do tej kategorii, wstaw do nich szablony integracji z kategorii: {{lk|Szablony integracji i podziału}} lub {{lk|Szablony porządkowe}}, z zastosowaniem do {{#switch:{{{klucz|}}}|artykuł=artykułów|podręcznik=podręczników|artykuł dla dzieci=artykułów dla dzieci|podręcznik dla dzieci=podręczników dla dzieci|jednostka użytkownika=jednostek użytkowników|jednostka brudnopisu projektu=jednostek brudnopisu projektu|strona kategorii=stron kategorii|strona szablonu=stron szablonu|strona modułu=stron modułów|strona brudnopisu szablonu=stron brudnopisu projektu|strona brudnopisu modułu=strona brudnopisu modułu|strona projektu=stron projektu|strona pomocy=stron pomocy}}, z opcjonalnym parametrem z dodatkowym objaśnieniem, jeżeli dany szablon tego wymaga, tzn. szablony podane poniżej. == Szablony {{s|Integruj}} i {{s|Integracja}} == Szablony do integracji {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, w której są one umieszczone, {{#switch:{{{klucz|}}}|artykuł=z artykułem|podręcznik=z podręcznikiem|artykuł dla dzieci=z artykułem dla dzieci|podręcznik dla dzieci=z podręcznikiem dla dzieci|jednostka użytkownika=z jednostką użytkownika|jednostka brudnopisu projektu=z jednostką brudnopisu projektu|strona kategorii=ze stroną kategorii|strona szablonu=ze stroną szablonu|strona modułu=ze stroną modułu|strona brudnopisu szablonu=ze stroną brudnopisu projektu|strona brudnopisu modułu=ze stroną brudnopisu modułu|strona projektu=ze stroną projektu|strona pomocy=ze stroną pomocy}}: {{#switch:{{{klucz|}}}|artykuł='''Nazwa podręcznika 1/Artykuł 1''' i '''Nazwa podręcznika 2/Artykuł 2'''|podręcznik='''Nazwa podręcznika 1''' i '''Nazwa podręcznika 2'''|artykuł dla dzieci='''Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1''' i '''Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2'''|podręcznik dla dzieci='''Nazwa podręcznika dla dzieci 1''' i '''Nazwa podręcznika dla dzieci 2'''|jednostka użytkownika='''Użytkownik 1/Nazwa jednostki użytkownika 1''' i '''Użytkownik 2/Nazwa jednostki użytkownika 2'''|jednostka brudnopisu projektu='''Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1''' i '''Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2'''|strona kategorii='''Nazwa strony kategorii 1''' i '''Nazwa strony kategorii 2'''|strona szablonu='''Nazwa strony szablonu 1''' i '''Nazwa strony szablonu 2'''|strona modułu='''Nazwa strony modułu 1''' i '''Nazwa strony modułu 2'''|strona brudnopisu szablonu='''Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1''' i '''Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2'''|strona brudnopisu modułu='''Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1''' i '''Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2'''|strona projektu='''Nazwa strony projektu 1''' i '''Nazwa strony projektu 2'''|strona pomocy='''Nazwa strony pomocy 1''' i '''Nazwa strony pomocy 2'''}}. === A oto ilustracja wywołania tych szablonów === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1{{=}}Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2{{=}}Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1=Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2=Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1{{=}}Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2{{=}}Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1=Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2=Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} ==== Szablon {{s|Integracja}} ==== * Wywołanie szablonu {{s|Integracja}} jest takie samo jak do szablonu {{s|Integruj}}, bo ten pierwszy jest przekierowaniem do tego drugiego. == Szablon {{s|Integruj z}} == Szablon mówi, aby {{#switch:{{{klucz|}}}|artykuł=z tym artykułem|podręcznik=z tym podręcznikiem|artykuł dla dzieci=z tym artykułem dla dzieci|podręcznik dla dzieci=z tym podręcznikiem dla dzieci|jednostka użytkownika=z tą jednostką użytkownika|jednostka brudnopisu projektu=z tą jednostką brudnopisu projektu|strona kategorii=z tą strony kategorii|strona szablonu=z tą strony szablonu|strona modułu=z tą strony modułu|strona brudnopisu szablonu=z tą strony brudnopisu projektu|strona brudnopisu modułu=z tą strony brudnopisu modułu|strona projektu=z tą strony projektu|strona pomocy=z tą strony pomocy}}, w której jest umieszczony on, zintegrować {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}}: '''{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}'''. === A oto ilustracja wywołania tego szablonu === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj z|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} == Szablon {{s|Integruj do}} == Szablon mówi, aby {{#switch:{{{klucz|}}}|artykuł=ten artykuł|podręcznik=ten podręcznik|artykuł dla dzieci=ten artykuł dla dzieci|podręcznik dla dzieci=ten podręcznik dla dzieci|jednostka użytkownika=tę jednostkę użytkownika|jednostka brudnopisu projektu=tę jednostkę brudnopisu projektu|strona kategorii=tę stronę kategorii|strona szablonu=tę stronę szablonu|strona modułu=tę stronę modułu|strona brudnopisu szablonu=tę stronę brudnopisu projektu|strona brudnopisu modułu=tę stronę brudnopisu modułu|strona projektu=tę stronę projektu|strona pomocy=tę stronę pomocy}} w której jest umieszczony on, zintegrować {{#switch:{{{klucz|}}}|artykuł=z artykułem|podręcznik=z podręcznikiem|artykuł dla dzieci=z artykułem dla dzieci|podręcznik dla dzieci=z podręcznikiem dla dzieci|jednostka użytkownika=z jednostką użytkownika|jednostka brudnopisu projektu=z jednostką brudnopisu projektu|strona kategorii=ze stroną kategorii|strona szablonu=ze stroną szablonu|strona modułu=ze stroną modułu|strona brudnopisu szablonu=ze stroną brudnopisu projektu|strona brudnopisu modułu=ze stroną brudnopisu modułu|strona projektu=ze stroną projektu|strona pomocy=ze stroną pomocy}}: '''{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}'''. === A oto ilustracja wywołania tego szablonu === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj do|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj do|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj do|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj do|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} == Szablon {{s|Integrowanie}} == Szablonu używamy, gdy chcemy powiadomić innych wikipedystów, że właśnie trwa integracja artykułu, aby zapobiec konfliktom edycji (podobną rolę spełnia {{s|W edycji}}). === A oto ilustracja wywołania tego szablonu === A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integrowanie|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integrowanie|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|typ jednostki={{{klucz|}}}}}}} }} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} r3ermrdky6nce39xc5qcs4jplpjhgbb 546183 546173 2026-06-08T19:00:46Z Persino 2851 546183 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{Śródtekst|bez preprocess=tak|klucz=artykuł|uchwyt=integracja|tekst= Zawierają {{#switch:{{{klucz|}}}|artykuł=artykuły|podręcznik=podręczniki|artykuł dla dzieci=artykuły dla dzieci|podręcznik dla dzieci=podręczniki dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}} ({{#switch:{{{klucz|}}}|artykuł|podręcznik=w przestrzeni nazw {{Np|(main)|link=tak}}|artykuł dla dzieci|podręcznik dla dzieci=w przestrzeni nazw {{Np|Wikijunior|link=tak}} bez {{lj2|Strona główna}}|jednostka użytkownika=w przestrzeni nazw {{Np|User|link=tak}}|jednostka brudnopisu projektu=w nibyprzestrzeni nazw {{lr2|Brudnopis}} w przestrzeni nazw {{Np|Wikibooks|link=tak}}|strona kategorii=w przestrzeni nazw {{Np|Category|link=tak}}|strona szablonu=w przestrzeni nazw {{Np|Template|link=tak}}|strona modułu=w przestrzeni nazw {{Np|Module|link=tak}}|strona brudnopisu szablonu=w nibyprzestrzeni nazw {{ls2|Brudnopis}} w przestrzeni nazw {{Np|Template|link=tak}}|strona brudnopisu modułu=w nibyprzestrzeni nazw {{ld2|Brudnopis}}|strona projektu=w przestrzeni nazw {{Np|Wikibooks|link=tak}} bez {{lr2|Strona główna}}|strona pomocy=w przestrzeni nazw {{Np|Help|link=tak}}}}) wymagające integracji, czyli połączenia z innymi {{#switch:{{{klucz|}}}|artykuł=artykułami|podręcznik=podręcznikami|artykuł dla dzieci=artykułami dla dzieci|podręcznik dla dzieci=podręcznikami dla dzieci|jednostka użytkownika=jednostkami użytkowników|jednostka brudnopisu projektu=jednostkami brudnopisu projektu|strona kategorii=stronami kategorii|strona szablonu=stronami szablonu|strona modułu=stronami modułów|strona brudnopisu szablonu=stronami brudnopisu projektu|strona brudnopisu modułu=stronami brudnopisu modułu|strona projektu=stronami projektu|strona pomocy=stronami pomocy}}. Aby dodać do tej kategorii, wstaw do nich szablony integracji z kategorii: {{lk|Szablony integracji i podziału}} lub {{lk|Szablony porządkowe}}, z zastosowaniem do {{#switch:{{{klucz|}}}|artykuł=artykułów|podręcznik=podręczników|artykuł dla dzieci=artykułów dla dzieci|podręcznik dla dzieci=podręczników dla dzieci|jednostka użytkownika=jednostek użytkowników|jednostka brudnopisu projektu=jednostek brudnopisu projektu|strona kategorii=stron kategorii|strona szablonu=stron szablonu|strona modułu=stron modułów|strona brudnopisu szablonu=stron brudnopisu projektu|strona brudnopisu modułu=strona brudnopisu modułu|strona projektu=stron projektu|strona pomocy=stron pomocy}}, z opcjonalnym parametrem z dodatkowym objaśnieniem, jeżeli dany szablon tego wymaga, tzn. szablony podane poniżej. == Szablony {{s|Integruj}} i {{s|Integracja}} == Szablony do integracji {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, w której są one umieszczone, {{#switch:{{{klucz|}}}|artykuł=z artykułem|podręcznik=z podręcznikiem|artykuł dla dzieci=z artykułem dla dzieci|podręcznik dla dzieci=z podręcznikiem dla dzieci|jednostka użytkownika=z jednostką użytkownika|jednostka brudnopisu projektu=z jednostką brudnopisu projektu|strona kategorii=ze stroną kategorii|strona szablonu=ze stroną szablonu|strona modułu=ze stroną modułu|strona brudnopisu szablonu=ze stroną brudnopisu projektu|strona brudnopisu modułu=ze stroną brudnopisu modułu|strona projektu=ze stroną projektu|strona pomocy=ze stroną pomocy}}: {{#switch:{{{klucz|}}}|artykuł='''Nazwa podręcznika 1/Artykuł 1''' i '''Nazwa podręcznika 2/Artykuł 2'''|podręcznik='''Nazwa podręcznika 1''' i '''Nazwa podręcznika 2'''|artykuł dla dzieci='''Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1''' i '''Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2'''|podręcznik dla dzieci='''Nazwa podręcznika dla dzieci 1''' i '''Nazwa podręcznika dla dzieci 2'''|jednostka użytkownika='''Użytkownik 1/Nazwa jednostki użytkownika 1''' i '''Użytkownik 2/Nazwa jednostki użytkownika 2'''|jednostka brudnopisu projektu='''Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1''' i '''Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2'''|strona kategorii='''Nazwa strony kategorii 1''' i '''Nazwa strony kategorii 2'''|strona szablonu='''Nazwa strony szablonu 1''' i '''Nazwa strony szablonu 2'''|strona modułu='''Nazwa strony modułu 1''' i '''Nazwa strony modułu 2'''|strona brudnopisu szablonu='''Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1''' i '''Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2'''|strona brudnopisu modułu='''Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1''' i '''Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2'''|strona projektu='''Nazwa strony projektu 1''' i '''Nazwa strony projektu 2'''|strona pomocy='''Nazwa strony pomocy 1''' i '''Nazwa strony pomocy 2'''}}. === A oto ilustracja wywołania tych szablonów === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1{{=}}Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2{{=}}Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1=Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2=Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1{{=}}Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2{{=}}Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 1/Artykuł 1|podręcznik=Nazwa podręcznika 1|artykuł dla dzieci=Nazwa podręcznika dla dzieci 1/Artykuł dla dzieci 1|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 1|jednostka użytkownika=Użytkownik 1/Nazwa jednostki użytkownika 1|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 1|strona kategorii=Nazwa strony kategorii 1|strona szablonu=Nazwa strony szablonu 1|strona modułu=Nazwa strony modułu 1|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 1|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 1|strona projektu=Nazwa strony projektu 1|strona pomocy=Nazwa strony pomocy 1}}|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika 2/Artykuł 2|podręcznik=Nazwa podręcznika 2|artykuł dla dzieci=Nazwa podręcznika dla dzieci 2/Artykuł dla dzieci 2|podręcznik dla dzieci=Nazwa podręcznika dla dzieci 2|jednostka użytkownika=Użytkownik 2/Nazwa jednostki użytkownika 2|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu 2|strona kategorii=Nazwa strony kategorii 2|strona szablonu=Nazwa strony szablonu 2|strona modułu=Nazwa strony modułu 2|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu 2|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu 2|strona projektu=Nazwa strony projektu 2|strona pomocy=Nazwa strony pomocy 2}}|uzasadnienie 1=Należy sprawdzić, czy propozycja integracji pierwszej jednostki z tą jednostką jest zasadna|uzasadnienie 2=Należy sprawdzić, czy propozycja integracji drugiej jednostki z tą jednostką jest zasadna|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} ==== Szablon {{s|Integracja}} ==== * Wywołanie szablonu {{s|Integracja}} jest takie samo jak do szablonu {{s|Integruj}}, bo ten pierwszy jest przekierowaniem do tego drugiego. == Szablon {{s|Integruj z}} == Szablon mówi, aby {{#switch:{{{klucz|}}}|artykuł=z tym artykułem|podręcznik=z tym podręcznikiem|artykuł dla dzieci=z tym artykułem dla dzieci|podręcznik dla dzieci=z tym podręcznikiem dla dzieci|jednostka użytkownika=z tą jednostką użytkownika|jednostka brudnopisu projektu=z tą jednostką brudnopisu projektu|strona kategorii=z tą stroną kategorii|strona szablonu=z tą stroną szablonu|strona modułu=z tą stroną modułu|strona brudnopisu szablonu=z tą stroną brudnopisu projektu|strona brudnopisu modułu=z tą stroną brudnopisu modułu|strona projektu=z tą stroną projektu|strona pomocy=z tą stroną pomocy}}, w której jest umieszczony on, zintegrować {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}}: '''{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}'''. === A oto ilustracja wywołania tego szablonu === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=strony szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj z|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj z|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} == Szablon {{s|Integruj do}} == Szablon mówi, aby {{#switch:{{{klucz|}}}|artykuł=ten artykuł|podręcznik=ten podręcznik|artykuł dla dzieci=ten artykuł dla dzieci|podręcznik dla dzieci=ten podręcznik dla dzieci|jednostka użytkownika=tę jednostkę użytkownika|jednostka brudnopisu projektu=tę jednostkę brudnopisu projektu|strona kategorii=tę stronę kategorii|strona szablonu=tę stronę szablonu|strona modułu=tę stronę modułu|strona brudnopisu szablonu=tę stronę brudnopisu projektu|strona brudnopisu modułu=tę stronę brudnopisu modułu|strona projektu=tę stronę projektu|strona pomocy=tę stronę pomocy}} w której jest umieszczony on, zintegrować {{#switch:{{{klucz|}}}|artykuł=z artykułem|podręcznik=z podręcznikiem|artykuł dla dzieci=z artykułem dla dzieci|podręcznik dla dzieci=z podręcznikiem dla dzieci|jednostka użytkownika=z jednostką użytkownika|jednostka brudnopisu projektu=z jednostką brudnopisu projektu|strona kategorii=ze stroną kategorii|strona szablonu=ze stroną szablonu|strona modułu=ze stroną modułu|strona brudnopisu szablonu=ze stroną brudnopisu projektu|strona brudnopisu modułu=ze stroną brudnopisu modułu|strona projektu=ze stroną projektu|strona pomocy=ze stroną pomocy}}: '''{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}'''. === A oto ilustracja wywołania tego szablonu === ==== Strona ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integruj do|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj do|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|typ jednostki={{{klucz|}}}}}}} ==== Sekcja ==== A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}, a w nim jest wstawiony szablon w sekcji: * {{s|Integruj do|Nazwa podręcznika/Artykuł|uzasadnienie{{=}}Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja{{=}}tak}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integruj do|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|uzasadnienie=Należy sprawdzić, czy propozycja integracji jest zasadna|sekcja=tak|typ jednostki={{{klucz|}}}}}}} == Szablon {{s|Integrowanie}} == Szablonu używamy, gdy chcemy powiadomić innych wikipedystów, że właśnie trwa integracja artykułu, aby zapobiec konfliktom edycji (podobną rolę spełnia {{s|W edycji}}). === A oto ilustracja wywołania tego szablonu === A oto przykład ilustrujący zasadę umieszczania '''w tej kategorii''', {{#switch:{{{klucz|}}}|artykuł=artykułu|podręcznik=podręcznika|artykuł dla dzieci=artykułu dla dzieci|podręcznik dla dzieci=podręcznika dla dzieci|jednostka użytkownika=jednostki użytkownika|jednostka brudnopisu projektu=jednostki brudnopisu projektu|strona kategorii=strony kategorii|strona szablonu=strony szablonu|strona modułu=strony modułu|strona brudnopisu szablonu=strony brudnopisu projektu|strona brudnopisu modułu=strony brudnopisu modułu|strona projektu=strony projektu|strona pomocy=strony pomocy}}: * {{s|Integrowanie|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}}} ** Szablon umieszcza {{#switch:{{{klucz|}}}|artykuł=artykuł|podręcznik=podręcznik|artykuł dla dzieci=artykuł dla dzieci|podręcznik dla dzieci=podręcznik dla dzieci|jednostka użytkownika=jednostkę użytkownika|jednostka brudnopisu projektu=jednostkę brudnopisu projektu|strona kategorii=stronę kategorii|strona szablonu=stronę szablonu|strona modułu=stronę modułu|strona brudnopisu szablonu=stronę brudnopisu projektu|strona brudnopisu modułu=stronę brudnopisu modułu|strona projektu=stronę projektu|strona pomocy=stronę pomocy}} do integracji w kategorii tutaj. A po wywołaniu tego szablonu uzyskano wynik: {{OpakujKategorieZeSortowaniem|{{Integrowanie|{{#switch:{{{klucz|}}}|artykuł=Nazwa podręcznika/Artykuł|podręcznik=Nazwa podręcznika|artykuł dla dzieci=Nazwa podręcznika dla dzieci/Artykuł dla dzieci|podręcznik dla dzieci=Nazwa podręcznika dla dzieci|jednostka użytkownika=Użytkownik/Nazwa jednostki użytkownika|jednostka brudnopisu projektu=Brudnopis/Użytkownik/Nazwa jednostki brudnopisu projektu|strona kategorii=Nazwa strony kategorii|strona szablonu=Nazwa strony szablonu|strona modułu=Nazwa strony modułu|strona brudnopisu szablonu=Brudnopis/Użytkownik/Nazwa strony brudnopisu szablonu|strona brudnopisu modułu=Brudnopis/Użytkownik/Nazwa strony brudnopisu modułu|strona projektu=Nazwa strony projektu|strona pomocy=Nazwa strony pomocy}}|typ jednostki={{{klucz|}}}}}}} }} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} 10iieq8zhsgmb8rovidzfsmsnl5d2sr Kategoria:Strony szablonów, do zintegrowania 14 33348 546177 517453 2026-06-08T18:52:43Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona szablonu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546177 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona szablonu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} s1wpo607lxa6locvowmy9z8fzqgbfb7 Kategoria:Strony kategorii, do zintegrowania 14 41276 546176 517480 2026-06-08T18:51:51Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona kategorii|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546176 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona kategorii|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} 88002t5p3gfte2457zezmcxnwhi99je Kategoria:Strony modułów, do zintegrowania 14 41279 546178 517482 2026-06-08T18:53:58Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona modułu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546178 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona modułu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} dducgkj9jc7gleyvjb1d670f7tr492i Kategoria:Strony projektu, do zintegrowania 14 42149 546181 517542 2026-06-08T18:57:39Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona projektu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546181 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona projektu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} qbha3rni1lndr6ormh0txukqfvs353h Kategoria:Strony pomocy, do zintegrowania 14 42150 546182 517543 2026-06-08T18:58:50Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona pomocy|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546182 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona pomocy|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} ji3lh7e6mk053g4w5ljywfwi5569v9t Kategoria:Jednostki użytkowników, do zintegrowania 14 42151 546174 517544 2026-06-08T18:49:37Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=jednostka użytkownika|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546174 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=jednostka użytkownika|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} hlfqva439mzcmiajoc12rqxio5mqvgg Kategoria:Podręczniki do zintegrowania 14 42155 546170 517548 2026-06-08T18:45:26Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=podręcznik|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546170 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=podręcznik|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} dezlopqml0qkdnm1aah7k4yn2xhw7hl Kategoria:Artykuły dla dzieci, do zintegrowania 14 46073 546171 524188 2026-06-08T18:46:16Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=artykuł dla dzieci|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546171 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=artykuł dla dzieci|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} 7u2c7g9lvqejwqdp99k707dwhw0dq38 Kategoria:Podręczniki dla dzieci, do zintegrowania 14 46074 546172 524189 2026-06-08T18:47:01Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=podręcznik dla dzieci|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546172 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=podręcznik dla dzieci|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} divyh6yix8hrzbqa7fskqbegsycb5oh Kategoria:Jednostki brudnopisu projektu, do zintegrowania 14 51540 546175 524190 2026-06-08T18:50:30Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=jednostka brudnopisu projektu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546175 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=jednostka brudnopisu projektu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} iqa7jvda1v4h54129otgxx45ua34um8 Kategoria:Strony brudnopisu szablonów, do zintegrowania 14 51541 546179 524191 2026-06-08T18:55:01Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona brudnopisu szablonu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546179 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona brudnopisu szablonu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} 645mz8b04eb08amk58rns35avr6e5bx Kategoria:Strony brudnopisu modułów, do zintegrowania 14 51542 546180 524192 2026-06-08T18:56:37Z Persino 2851 UWAGA! Zastąpienie treści hasła bardzo krótkim tekstem: „<noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona brudnopisu modułu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}}” 546180 wikitext text/x-wiki <noinclude>{{StandardowaStronaStart}}</noinclude> {{Szablon nawigacyjny konserwacyjny|4|1}} {{Spis treści|limit=2}} {{PobierzŚródtekst|klucz=strona brudnopisu modułu|uchwyt=integracja|nazwa artykułu=|nazwa książki=Kategoria:Artykuły do zintegrowania}} {{DivClear}} <noinclude>{{StandardowaStronaKoniec}}</noinclude> {{Kategoria|Jednostki do zintegrowania}} 3gbyrvar7b3ds0v5k5qhi63k45as1fp Moduł:StronicowyParser/ZbieranieDanychStron 828 55009 546167 544818 2026-06-08T17:49:41Z Persino 2851 546167 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,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",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; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); 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,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,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; for _,tab_value1 in ipairs(tab_ksiazki.spis)do if(tab_value1[2])then for _,nazwa_artykulu1 in ipairs(tab_value1[2])do if(nazwa_artykulu1[1]==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",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",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.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,((not czy_inna_wartosc_tekst)and true or false)); --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.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_aktualna,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_aktualna,}; ---- 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.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna); 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); 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); 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); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst); end; end; function p.GeneralneLinkowanie(self,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) 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,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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",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); end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA) 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)then __FUNKCJA(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(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))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 stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); else stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieInnychStron(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu) 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_zmiennych={}; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych); if(tabela_listy_danych_analizy_ksiazki0)then if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then return;end; 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_zmiennych.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.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(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; 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 return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni; 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=__FUNKCJA(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; 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; ---- 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",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==4))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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==2)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; elseif(kod_wyniku==3)then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nil); 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(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==1)or(kod_wyniku_bazowy==4))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==1)then nazwa_artykulu=artykul; local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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); elseif(kod_wyniku==2)then local nazwa_artykulu=artykul; local 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)or(kod_wyniku_bazowy==4))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(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.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.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 iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); local tabela_elementow_strony_kodow={}; for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowSzablonuISzablonu(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu) 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.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.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.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) 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]],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) 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,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) 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,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) 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,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; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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],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) 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]],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) 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]],nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local tekst=tabela_parametrow_szablonu["tekst"] or tabela_parametrow_szablonu["treść"] or tabela_parametrow_szablonu[1]; local bez_preproces=parametry_modul.CzyTak(tabela_parametrow_szablonu["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(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_preproces))then local frame=mw.getCurrentFrame(); tekst=frame:preprocess(tekst); end; lista_dwuelementowa[2]=tekst; end; end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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,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) 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) 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; stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowSzablonuISzablonu); end; 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; 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; 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 CzyJestTakiProblemJakoElementTablicy() 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,CzyJestTakiProblemJakoElementTablicy},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; 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.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]; end; return self.tabela_listy_danych_analizy_ksiazki; end; return p; 8u3e8vo8r3g5rc8h9vvjuj7fs6cu20v 546168 546167 2026-06-08T17:59:07Z Persino 2851 546168 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,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",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; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); 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,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,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; for _,tab_value1 in ipairs(tab_ksiazki.spis)do if(tab_value1[2])then for _,nazwa_artykulu1 in ipairs(tab_value1[2])do if(nazwa_artykulu1[1]==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",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",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.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,((not czy_inna_wartosc_tekst)and true or false)); --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.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_aktualna,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_aktualna,}; ---- 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.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna); 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); 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); 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); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst); end; end; function p.GeneralneLinkowanie(self,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) 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,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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",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); end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA) 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)then __FUNKCJA(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(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))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 stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); else stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieInnychStron(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu) 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_zmiennych={}; tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2={} local tabela_listy_danych_analizy_ksiazki0=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych); if(tabela_listy_danych_analizy_ksiazki0)then if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then return;end; 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_zmiennych.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.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(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; 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 return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni; 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=__FUNKCJA(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; 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; ---- 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",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==4))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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==2)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; elseif(kod_wyniku==3)then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nil); 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(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==1)or(kod_wyniku_bazowy==4))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==1)then nazwa_artykulu=artykul; local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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); elseif(kod_wyniku==2)then local nazwa_artykulu=artykul; local 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)or(kod_wyniku_bazowy==4))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(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.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.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 iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); local tabela_elementow_strony_kodow={}; for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowSzablonuISzablonu(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu) 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.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.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.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) 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]],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) 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,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) 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,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) 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,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; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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],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) 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]],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) 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]],nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local tekst=tabela_parametrow_szablonu["tekst"] or tabela_parametrow_szablonu["treść"] or tabela_parametrow_szablonu[1]; local bez_preprocess=parametry_modul.CzyTak(tabela_parametrow_szablonu["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(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; end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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,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) 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) 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; stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowSzablonuISzablonu); end; 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; 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; 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 CzyJestTakiProblemJakoElementTablicy() 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,CzyJestTakiProblemJakoElementTablicy},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; 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.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]; end; return self.tabela_listy_danych_analizy_ksiazki; end; return p; fc347j99c8biwbr0kahy6komevpvc0u 546184 546168 2026-06-09T10:40:25Z Persino 2851 546184 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,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",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; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); 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,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,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; for _,tab_value1 in ipairs(tab_ksiazki.spis)do if(tab_value1[2])then for _,nazwa_artykulu1 in ipairs(tab_value1[2])do if(nazwa_artykulu1[1]==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",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",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.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,((not czy_inna_wartosc_tekst)and true or false)); --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.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_aktualna,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_aktualna,}; ---- 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.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna); 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); 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); 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); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst); end; end; function p.GeneralneLinkowanie(self,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) 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,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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",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); end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA) 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)then __FUNKCJA(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(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))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 stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); else stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieInnychStron(self,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu) 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=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then return;end; 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.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(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; 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 return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni; 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=__FUNKCJA(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; 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; ---- 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",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==4))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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==2)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; elseif(kod_wyniku==3)then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nil); 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(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==1)or(kod_wyniku_bazowy==4))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==1)then nazwa_artykulu=artykul; local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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); elseif(kod_wyniku==2)then local nazwa_artykulu=artykul; local 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)or(kod_wyniku_bazowy==4))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(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.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.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 iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); local tabela_elementow_strony_kodow={}; for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowSzablonuISzablonu(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu) 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.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.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.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) 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]],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) 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,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) 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,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) 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,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; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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],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) 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]],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) 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]],nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then local tekst=tabela_parametrow_szablonu["tekst"] or tabela_parametrow_szablonu["treść"] or tabela_parametrow_szablonu[1]; local bez_preprocess=parametry_modul.CzyTak(tabela_parametrow_szablonu["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(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; end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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,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) 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) 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; stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowSzablonuISzablonu); end; 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; 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; 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 CzyJestTakiProblemJakoElementTablicy() 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,CzyJestTakiProblemJakoElementTablicy},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; 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.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]; end; return self.tabela_listy_danych_analizy_ksiazki; end; return p; h6ipu93x7eqithupk9odys36fsgtiwa 546185 546184 2026-06-09T11:21:23Z Persino 2851 546185 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,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",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; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); 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,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,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; for _,tab_value1 in ipairs(tab_ksiazki.spis)do if(tab_value1[2])then for _,nazwa_artykulu1 in ipairs(tab_value1[2])do if(nazwa_artykulu1[1]==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",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",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.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,((not czy_inna_wartosc_tekst)and true or false)); --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.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_aktualna,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_aktualna,}; ---- 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.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna); 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); 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); 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); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst); end; end; function p.GeneralneLinkowanie(self,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) 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,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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",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); end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA) 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)then __FUNKCJA(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(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))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 stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); else stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieInnychStron(self,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu) 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=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then return;end; tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych=tablica_zmiennych2.tablica_szablonu_tekstu_niekorzystanych; 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.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(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; 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 return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni; 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=__FUNKCJA(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; 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; ---- 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",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==4))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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==2)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; elseif(kod_wyniku==3)then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nil); 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(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==1)or(kod_wyniku_bazowy==4))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==1)then nazwa_artykulu=artykul; local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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); elseif(kod_wyniku==2)then local nazwa_artykulu=artykul; local 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)or(kod_wyniku_bazowy==4))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(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.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.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 iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); local tabela_elementow_strony_kodow={}; for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowSzablonuISzablonu(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu) 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.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.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.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) 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]],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) 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,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) 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,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) 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,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; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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],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) 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]],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) 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]],nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then if(not czy_artykul_korzystany)then if(not tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych)then tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych={};end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych,{ lista_dwuelementowa[1], {uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,}, {tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,}, }); else if(not tablica_zmiennych.tablica_szablonu_tekstu_korzystanych)then tablica_zmiennych.tablica_szablonu_tekstu_korzystanych={};end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_korzystanych,{ lista_dwuelementowa[1], {uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,}, }); end; local tekst=tabela_parametrow_szablonu["tekst"] or tabela_parametrow_szablonu["treść"] or tabela_parametrow_szablonu[1]; local bez_preprocess=parametry_modul.CzyTak(tabela_parametrow_szablonu["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(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; end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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,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) 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) 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; stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowSzablonuISzablonu); end; 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; 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; 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 CzyJestTakiProblemJakoElementTablicy() 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,CzyJestTakiProblemJakoElementTablicy},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; 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.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]; end; return self.tabela_listy_danych_analizy_ksiazki; end; return p; 9zi4812w9a2vtbwoevgjg8ioeut415q 546186 546185 2026-06-09T11:47:46Z Persino 2851 546186 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,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",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; table.insert(tablica_zmiennych.tabela_listy_danych_analizy_ksiazki2[nazwa_obiektu],lista_dwuelementowa); 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,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,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; for _,tab_value1 in ipairs(tab_ksiazki.spis)do if(tab_value1[2])then for _,nazwa_artykulu1 in ipairs(tab_value1[2])do if(nazwa_artykulu1[1]==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",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",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.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,KtorySzablonMaZwracacKategorie,czy_inna_wartosc_tekst) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,self.nazwa_modulu_biezaca,((not czy_inna_wartosc_tekst)and true or false)); --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.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_aktualna,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_aktualna,}; ---- 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.ZbieranieKontenerowychInformacjiReferencji(self,tabela_parametrow_szablonu,nazwa_modulu_aktualna) local nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu=p.SzablonyReferencjiParametrowych(tabela_parametrow_szablonu,nazwa_modulu_aktualna); 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); 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); 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); else p.ZbieranieInformacjiStronyWoluminowychPozycji(self,tabela_parametrow_szablonu,nil,czy_inna_wartosc_tekst); end; end; function p.GeneralneLinkowanie(self,tablica_zmiennych,tabela_parametrow_szablonu,nazwa_obiektu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie) 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,tablica_zmiennych,nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu); else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul); p.PusteParametryReferencji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu, nazwa_obiektu); end; else p.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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.LinkowanieFinalizowaniePrac(self,tablica_zmiennych,nazwa_obiektu,uchwyt_obiektu,tablica_analizy_obiektow_strony_dany_modul) 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",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); end; function p.SprawdzanieCzyJestNiepoprawnaNazwaStrony(self, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu,__FUNKCJA) 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)then __FUNKCJA(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(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"))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 stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy korzystanych stron"); else stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowe nazwy stron dołączanych do stron"); end; end; end; end; function p.LinkowanieInnychStron(self,tablica_zmiennych, nazwa_obiektu, nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, uchwyt_obiektu) 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=p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu, false,tablica_zmiennych2); if(tabela_listy_danych_analizy_ksiazki0)then if(not parametry_modul.CzyTak(tabela_listy_danych_analizy_ksiazki0))then return;end; if(tablica_zmiennych2.tablica_szablonu_tekstu_niekorzystanych)then if(not tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych)then tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych={};end; for _,pozycja in ipairs(tablica_zmiennych2.tablica_szablonu_tekstu_niekorzystanych)do table.insert(tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych,pozycja); end; end; 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.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(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; 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 return 0,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni; 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=__FUNKCJA(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; 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; ---- 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",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==4))then local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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==2)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; elseif(kod_wyniku==3)then local tablica_przestrzeni,tablica_przestrzeni_ksiazki,tablica_ksiazki=__FUNKCJA_ARTYKULU(nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nil); 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(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==1)or(kod_wyniku_bazowy==4))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==1)then nazwa_artykulu=artykul; local wartosc_wyniku,tabela_artykul,lista_artykolow,tabela_ksiazka,tabela_przestrzeni_ksiazki,tabela_przestrzeni=__FUNKCJA(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); elseif(kod_wyniku==2)then local nazwa_artykulu=artykul; local 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)or(kod_wyniku_bazowy==4))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(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.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.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 iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul); local tabela_elementow_strony_kodow={}; for uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod in iterator do local function AnalizaParametrowSzablonuISzablonu(tabela_parametrow_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania,uzyskano_w_wyniku_parsowania_wywolanie_szablonu) 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.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.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.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) 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]],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) 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,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) 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,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) 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,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; end; end; end; if(czy_wypowiedzenie)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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],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) 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]],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) 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]],nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,KtorySzablonMaZwracacKategorie); if(lista_dwuelementowa)then if(not czy_artykul_korzystany)then if(not tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych)then tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych={};end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_niekorzystanych,{ lista_dwuelementowa[1], {}, {uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,}, {tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,}, }); else if(not tablica_zmiennych.tablica_szablonu_tekstu_korzystanych)then tablica_zmiennych.tablica_szablonu_tekstu_korzystanych={};end; table.insert(tablica_zmiennych.tablica_szablonu_tekstu_korzystanych,{ lista_dwuelementowa[1], {}, {uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,}, }); end; local tekst=tabela_parametrow_szablonu["tekst"] or tabela_parametrow_szablonu["treść"] or tabela_parametrow_szablonu[1]; local bez_preprocess=parametry_modul.CzyTak(tabela_parametrow_szablonu["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(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; end; return; elseif(czy_artykul_korzystany)then if(czy_linkobiekt)then local function KtorySzablonMaZwracacKategorie(uchwyt_obiektu,__FUNKCJA) 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,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) 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) 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; stronicowyparser_potrzebne_modul:AnalizaSzablonuStronicowegoParsera(uzyskano_w_wyniku_parsowania_wywolanie_szablonu,obiekt,kod,nazwa_modulu_aktualna_czy_biezaca,tablica_danych_parametrow_szablonu_strony,AnalizaParametrowSzablonuISzablonu); end; 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; 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; 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 CzyJestTakiProblemJakoElementTablicy() 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,CzyJestTakiProblemJakoElementTablicy},nil,tabela_elementow_strony_kodow); tablica_danych_nazwy_artykulu.TOC=toc; 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.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]; end; return self.tabela_listy_danych_analizy_ksiazki; end; return p; sqd2pp20aatzmb04k9k31gusjheekod Szablon:Śródtekst 10 63570 546166 544568 2026-06-08T17:49:09Z Persino 2851 546166 wikitext text/x-wiki <includeonly><!-- -->{{#invoke:StronicowyParser|NumerŚródtekstu | uchwyt = {{{uchwyt|{{{2|}}}}}} | nazwa szablonu = {{{nazwa szablonu|ŚródTekst}}} | obiekt = tekst | klasa = | styl = | bez automatu = {{{bez automatu|}}} }}<!-- -->{{#if:{{{bez kategorii stronicowych|}}}{{{bez automatu|}}}||{{#invoke:StronicowyParser|WstawKategorie|{{{uchwyt|{{{2|}}}}}}|Śródtekst}}}}<!-- -->{{#if:{{{bez dodatkowych sprawdzeń|}}}||<!-- -->{{#invoke:Sprawdź|Parametry | = problemy-w-szablonie-%s {{((}}Kategoria{{!}}Szablon %s %s do sprawdzenia{{))}} | 1 = txt!;tekst;treść | tekst = txt!;treść;1 | treść = txt!;tekst;1 | 2 = txt!;uchwyt | uchwyt = txt!;2 | klucz = txt | bez preprocess = | bez automatu = | bez kategorii stronicowych = }}<!-- -->}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> 92ke1olwur55k7pvizyv5owomog6p0p Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom II 4 63661 546136 546135 2026-06-08T12:07:22Z Persino 2851 /* Dalszy opis funkcji */ 546136 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale naza jest dekodowana, gdy ona jest niepusta. Następnie liczymt adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9lsjfuyzk7uh6ixcf2wz63diqi1b2aa 546137 546136 2026-06-08T12:28:03Z Persino 2851 /* Dalszy opis funkcji */ 546137 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale naza jest dekodowana, gdy ona jest niepusta. Następnie liczymt adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> if1nh34d9ok8ftu19rrvtyih67fgy4a 546138 546137 2026-06-08T12:28:35Z Persino 2851 /* Dalszy opis funkcji */ 546138 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale naza jest dekodowana, gdy ona jest niepusta. Następnie liczymt adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 14bcmt6fw7ik9trbkq2jwor7wl3pqvu 546139 546138 2026-06-08T12:30:35Z Persino 2851 /* Dalszy opis funkcji */ 546139 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale naza jest dekodowana, gdy ona jest niepusta. Następnie liczymt adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> j71ls31k9c6kq18zpa6jtd5ndmn12az 546140 546139 2026-06-08T12:31:44Z Persino 2851 /* Dalszy opis funkcji */ 546140 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale naza jest dekodowana, gdy ona jest niepusta. Następnie liczymt adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 47k1fyx17yu4ce6v68q0brnalt5irl3 546141 546140 2026-06-08T12:47:56Z Persino 2851 /* {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} */ 546141 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gr0ygc4oelorahjdrdpvyfkyqs1dnnv 546142 546141 2026-06-08T12:48:39Z Persino 2851 /* {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} */ 546142 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej tablicy jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2lhx6ed5j8k3byhcl2zjzcmx8sujahj 546143 546142 2026-06-08T13:05:43Z Persino 2851 /* Dalszy opis funkcji */ 546143 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy,czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> n3ppqg7afgdwc4s2msguvdj5jhbfuk9 546144 546143 2026-06-08T13:09:52Z Persino 2851 /* Dalszy opis funkcji */ 546144 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> of00p1klde45udtn2wspidksqe1a1ab 546145 546144 2026-06-08T13:11:17Z Persino 2851 /* Dalszy opis funkcji */ 546145 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> c1mcvwytcqxcht0sr2j894ylcu7djrh 546148 546145 2026-06-08T13:19:31Z Persino 2851 /* {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} */ 546148 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> rgki7i286rn3ngm6oooaz1rncu6w0nc 546149 546148 2026-06-08T15:30:41Z Persino 2851 /* Dalszy opis funkcji */ 546149 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{LinkPatrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{LinkPatrz|iter}} z funkcji: {{LinkŚrodtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy talk uzyskany {{Code|spis_treeści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{linkPatrz|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3xzzphgky2w25inh5yp4eimovirzrnd 546150 546149 2026-06-08T15:32:30Z Persino 2851 /* {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} */ 546150 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{LinkPatrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚrodtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy talk uzyskany {{Code|spis_treeści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{linkPatrz|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h7in8k9oxszyghakmoxnw34wc7l6atu 546151 546150 2026-06-08T15:33:23Z Persino 2851 /* Dalszy opis funkcji */ 546151 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{LinkPatrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚrodtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy talk uzyskany {{Code|spis_treeści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> bfwpm9xuxhyvejbc1evb5k81fiwkriy 546152 546151 2026-06-08T15:34:21Z Persino 2851 /* Dalszy opis funkcji */ 546152 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{LinkPatrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy talk uzyskany {{Code|spis_treeści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> svolnj1jffa34ed2m5zda4besae3hlf 546153 546152 2026-06-08T15:35:06Z Persino 2851 /* Dalszy opis funkcji */ 546153 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy talk uzyskany {{Code|spis_treeści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> cmqnsps0otkgce1pekq8d2gkl8qjbi3 546154 546153 2026-06-08T15:40:34Z Persino 2851 /* Dalszy opis funkcji */ 546154 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 05zgx1wgbhp6muiq1sral1cuzcsjwzd 546155 546154 2026-06-08T15:42:35Z Persino 2851 /* {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} */ 546155 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> iqagcw9vaif2jjcu6w4wl9v6u2r5jlx 546156 546155 2026-06-08T15:48:20Z Persino 2851 /* {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} */ 546156 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> e0aa4tvrzk7jnl7xqpx6215w75wk4ro 546157 546156 2026-06-08T15:56:54Z Persino 2851 /* Dalszy opis funkcji */ 546157 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dun80ywea1bpnc3vn836tkyk38sxrji 546158 546157 2026-06-08T15:57:58Z Persino 2851 /* Dalszy opis funkcji */ 546158 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gkc7xjvot86jid0ooy12cbw10w5yddp 546159 546158 2026-06-08T15:59:05Z Persino 2851 /* {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} */ 546159 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{LinkPatrz|liczba}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sxkzaj1ew1j5e0bxumk8pk17g6yxny2 546160 546159 2026-06-08T16:00:09Z Persino 2851 /* {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} */ 546160 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{LinkPatrz|liczba-IteratorSpisTresci}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5tpfvuei56uj2x503o37snmscz41s7e 546161 546160 2026-06-08T16:00:59Z Persino 2851 /* {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} */ 546161 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{LinkPatrz|liczba-IteratorSpisTresci}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba-IteratorFun}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dx8tu3fhg0ofy36kpswosiubhrrgybz 546162 546161 2026-06-08T16:01:38Z Persino 2851 /* {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} */ 546162 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba-IteratorSpisTresci}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba-IteratorFun}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dgn426m6f666wpinjt2vsfa7p8rmlwh 546163 546162 2026-06-08T16:04:47Z Persino 2851 /* Dalszy opis funkcji */ 546163 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba-IteratorSpisTresci}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba-IteratorFun}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie, wtedy liczymy definicję funkcji {{LinkŚródtytuł|IteratorFun}}, a potem spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> aetszc7owi08a85nu9dv11n7ookilpd 546164 546163 2026-06-08T16:05:45Z Persino 2851 /* Dalszy opis funkcji */ 546164 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba-IteratorSpisTresci}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba-IteratorFun}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie, wtedy liczymy definicję funkcji {{LinkŚródtytuł|IteratorSpisTresci}}, a potem spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów,wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 494z1d7o0jb33cwanqrrjox765qtl0c 546165 546164 2026-06-08T16:28:47Z Persino 2851 /* Dalszy opis funkcji */ 546165 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/SpisTreści}}|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ł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}{{Code|p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}} === Funkcja sprawdzająca, czy na stronie z głównym spisem treści lub w innych spisach treści podanych w: {{s|Układ autonawigacji}} {{Patrz|Układ autonawigacji}}, na jednych ze stron: {{s|NawigacjaSpecjalna/Nawigacja/}} {{Patrz|NawigacjaSpecjalna/Nawigacja/}} (te ustawienia są wykorzystywane przez {{s|Autonawigacja}} {{Patrz|Autonawigacja}}), dotyczącej danej książki, znajduje się artykuł o nazwie znajduje, z dokładnością do wielkości liter, artykuły o nazwach według tabeli: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}}} {{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> Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tabela_artykulow)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - tabela wielowymiarowa rozdziałów i do nich artykułów. Kopia tej tabeli jest połączona z metatabelką: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=StronicowyParser/obiekty}}}} {{Patrz|p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=setmetatable|n=setmetatable}}}}. Iterujemy dla elementach tabeli {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artyuły książki: {{Code|tab_lista[2]}} {{Patrz|tab_lista[2]}}, iterując po jego elementach, wtedy jednych z jego wartości, o pewnym numerze, bierzemy element: {{Code|artykul_w_bazie_element}} {{Patrz|artykul_w_bazie_element}}, według kodu: <syntaxhighlight lang="lua"> ---- Bierzemy jego pierwszy element "tab_stare", bo: "artykul_w_bazie_element", jest tabelką; local artykul_w_bazie=artykul_w_bazie_element[1]; ---- Sprawdzamy, czy element, zawiera klucz o nazwie "["LINK"]=true"; local czy_table=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(artykul_w_bazie); ---- Wybieramy w zależnosci, czy to jest tabelka, czy nie bez tego: "["LINK"]=true"; artykul_w_bazie=czy_table and artykul_w_bazie[1] or artykul_w_bazie; ---- Jeżeli ten element jest tabelką i posiada: "["LINK"]=true", to zwracamy pierwszy element, a jeżeli nie to sam element; local artykul_bez_naglowka_w_bazie=stronicowyparser_potrzebne_modul.TylkoNazwaStronyWoluminuZTabeliPublikacji(artykul_w_bazie); </syntaxhighlight> Powyższy kod, zawiera funkcje z: {{Code|{{ld2|StronicowyParser/Potrzebne}}}}, tzn.: {{Code|{{sr|#p.CzyTabelaStronyWoluminuSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, która sprawdza, czy element jest tabelka, i czy ma klucz: {{Code|LINK}}, wtedy zwraca wartość: {{Code|false}}, w przeciwnym wypadku, zrzuca wynik czy to jest owo (tabelka), i {{Code|{{sr|#p.TylkoNazwaStronyWoluminuZTabeliPublikacji|p=StronicowyParser/Potrzebne}}}}, który sprawdza, czy to jest tabelka, czy posiada klucz: "klucz", a jeżeli tak, to zwraca pierwszy element tej tabeli, a jeżeli nie, to zwraca to nawet, gdy by nie była tabelką, a jak jest nią, to nie posiada klucza: {{Code|LINK}}. Aby zrozumieć te funkcje skorzystaj zdefinicji: {{Code|tab_stare}} {{Patrz|tab_stare}}, na stronie: {{Code|{{lr|Moduły/StronicowyParser/SpisTreści/Tom I|SpisTreści - Tom I}}}}. Następnie sprawdzamy, czy to jest ten spis treści zagwarantowany według: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, a jeżeli tak, to funkcja zrzucza wartość: {{Code|artykul_bez_naglowka_w_bazie}} {{Patrz|artykul_bez_naglowka_w_bazie}} - jest to nazwa artykułu spisu treści o określonej nazwie bez nagłówka, a jeżeli mimo to nie znaleziono nic, to nic nie zwraca. === {{Śródtytuł|ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzucza wynik z jednego spisu rzeczy, którym jest strona główna książki, lub ewentualnie skojarzony z nią, spis, który jest artykuł o nazwie jednych z: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, z dokładnością do wielkości znaków. Funkcja też sprawdza stronę z {{s|Układ autonawigacji}}, czyli strony znajdujące się katalogu: {{s|NawigacjaSpecjalna/Nawigacja/}}, tam sprawdza, jakie spisy do niego należą i je liczy, też sprawdza jakie artykuły do niego należą. W ten sposób mamy utworzony spis treści, który po artykułach książki możemy nawigować za pomocą odpowiednich funkcji autonawigacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,czy_artykul_korzystany,__FUNKCJA_SPISU_RZECZY,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zbienna obiektowa funkcji, * {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki, * {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} - funkcja wykorzystywana w: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, jest to funkcja do różnych celu, w tym przypadku służy, to przypisysania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - funkcja opisana w rozdziale: {{Code|{{sr|#p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy|p=StronicowyParser/SpisTreści/Tom I}}}}, w module: {{Code|{{ld2|StronicowyParser/SpisTreści}}}}. ==== Fukcje lokalne ==== ===== {{Śródtytuł|Spis}}{{Code|Spis}} ===== Funkcja służy do ustawiania poszczególnych spisów treści, jeżeli książka ma ich kilka. Ona służy jedynie do jenego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótwa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} - tabela rozdziałów i do nich artykułów, * {{Code|spis_tresci}} {{Patrz|spis_tresci}} - jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli wlaśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: ** {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} - strona spis treści, która jest jednocześnie przekierowaniem, ** {{Code|spis_treści}} - jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie, * {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} - tabela innych spisów książki, jeżeli istnieją, * {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} - nazwa głównego spisu treści, zwykle jest to strona główna książki, * {{Code|numer}} {{Patrz|numer}} - numer, który liczmy, do którego dodajemy jeden. Parametry zwracane: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> Opis parametrów zwracanych: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Gdy zmienna: {{LinkPatrz|tablista_artykulow}}, istnieje, i ma niepustą tablicę, wtedy ta funkcja wtedy faktycznie coś robi, w przeciwnym wypadku zwraca tylko wynik. Liczmy spis treści, na który wskazuje przekierowanie, gdy strona nie jest nim, to sama strona ze wskazania: <syntaxhighlight lang="lua"> local czy_spis_tresci_table=parametry_modul.TypeTable(spis_tresci); local spis_tresci_strona=czy_spis_tresci_table and spis_tresci[1] or spis_tresci; </syntaxhighlight> Zmienna: {{Code|spis_tresci_strona}}, to jest nic innego jak: {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{LinkPatrz|spis_tresci}}. Policzmy zmienną:{{Code|tab_element}} {{Patrz|tab_element}}: <syntaxhighlight lang="lua"> local tab_element={[1]={((not spis_tresci) and "Główny spis treści" or ("Spis treści - "..spis_tresci_strona)),{((spis_tresci) and 1 or nil),nil,nil,},["spis"]={spis_tresci_strona or nazwa_glownego_spisu or "",numer}},[2]=nil,[3]=nil,}; </syntaxhighlight> Jeżeli pierwszy rozdział danego spisu nie ma numeracji, tzn. wtedy liczymy element: {{Code|tablista_artykulow[1][1][2][1]}}, to wtedy jego pozycje artykularne {{Code|numer > 1}} zapisujemy na sam koniec w tablicy {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.remove|n=table.remove}}}}. Poziomy rozdziałów powiększamy o jeden aż do napotkania pierwszego rozdziału centrowanego, wtedy przerywamy pętle. Następnym podejściem jest dodanie przed pierwsza pozycją elementu: {{LinkPatrz|tab_element}}, do tablicy: {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=table.insert|n=table.insert}}}} {{Patrz|table.insert}}. Jeżeli spis treści {{LinkPatrz|spis_tresci}} istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{LinkPatrz|spis_tresci}}, przy pomocy: {{LinkPatrz|table.insert}}, dodajemy do {{LinkPatrz|tab_inne_spisy}}. Następnie jeżeli nie istnieje element {{Code|tablista_artykulow[1][2]}} {{Patrz|tablista_artykulow[1][2]}}, związany artykułami należącymi do rozdziału, to go tworzymy, wtedy tworzymy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, w postaci: <syntaxhighlight lang="lua"> local tab_stare={czy_spis_tresci_table and {spis_tresci_strona,nil,przekierowanie_strona} or spis_tresci,{0,"","",true,},"[[:"..pelna_nazwa_ksiazki.."/" ..spis_tresci_strona.."]]",false,}; </syntaxhighlight> To {{LinkPatrz|tab_stare}} jest opisane w module: {{lr|Moduły/StronicowyParser/SpisTreści/Tom I|Spis treści - Tom I}}. To dodajemy na pierwszą pozycję do zbioru artykułów, do elementu {{LinkPatrz|tablista_artykulow[1][2]}}, na pierwszą pocycję, przy pomocy funkcji: {{LinkPatrz|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzsykiwania elementów danego spisu, ustawiania go odpowiedniego i wstawianie go do ogólnego spisu opisujące wszystkie spisy w danej książce. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|spis_tresci}} - jak w: {{LinkPatrz|spis_tresci}}, * {{Code|numer}} - jak w: {{LinkPatrz|numer}}. Uzyskujemy elementy spisu z wywołania dla pojedynczego spisu treści: <syntaxhighlight lang="lua"> local tablista_artykulow_iter,tablica_licencji,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,spis_tresci,false,nil,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Jeżeli zmienna: {{Code|tablista_artykulow_iter}} {{Patrz|tablista_artykulow_iter}} istnieje i jest tablicą, to ją przetwarzamy przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, w sposób: <syntaxhighlight lang="lua"> tablista_artykulow_iter,tab_inne_spisy,numer=Spis(tablista_artykulow_iter,(not przekierowanie_spisu_tresci)and spis_tresci or {przekierowanie_spisu_tresci,spis_tresci,},tab_inne_spisy,nil,numer); </syntaxhighlight> Tak otrzymanną zmienną: {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{LinkPatrz|tablista_artykulow}}, a jak tak tablica nie istnieje, to ją tworzymy z pustą tablicą, i wtedy wykonujemy tą operację. To wsadzanie wykonujemy za pomocą funkcji: {{LinkPatrz|table.insert}}. Na samym końcu zwracamy wiele elementów: <syntaxhighlight lang="lua"> return tablista_artykulow,tab_inne_spisy,numer; </syntaxhighlight> ===== {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} ===== Funkcja przygotowuje aktualny spis tresci, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SpisRzeczy(tabela_artykulow,tab_inne_spisy)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_artykulow}} - jak w: {{LinkPatrz|tabela_artykulow}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}. Uruchamiamy funkcję: {{LinkŚródtytuł|CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku}}, która zwraca wynik, który trzeba sprawdzić, czy istnieje, przed dalszymi operacjami, tzn. {{Code|artykul_spisu_rzeczy}} {{Patrz|artykul_spisu_rzeczy}}, uzyskując z aktualnej listy spis treści dla całej książki, jako jego zespołu, na podstawie jego dowiadujemy, ża taki omawiany spis istnieje, wtedy stary spis, czyli stronę główną podręcznika, przygotujemy do tego, do tego robimy funkcją: {{LinkŚródtytuł|Spis}}, wywołaniem, ale przed tymwywołaniem ustawiamy {{Code|numer {{=}} 1}}, zatem: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=Spis(tabela_artykulow,nil,tab_inne_spisy,"",numer); </syntaxhighlight> Następnym krokiem jest czytanie tego spisu przy pomocy wywołania: {{LinkŚródtytuł|InneSpisy}}, jako: <syntaxhighlight lang="lua"> tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tabela_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); </syntaxhighlight> Funkcja używa zmiennej uzyskanego wcześniej, tzn. {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, którym wartością jest nazwa artykułu bez nagłówka w bazie. Wartościami zwracanymi przez funkcję dwie osobne zmienne zrzucane jednocześnie: <syntaxhighlight lang="lua"> return tabela_artykulow,tab_inne_spisy; </syntaxhighlight> Jest to ogólna tabela wszystkich rozdziałów i do nich ich artykułów, i uzupełniona lista innych spisów treści. ===== {{Śródtytuł|IteratorSpisTresci}}{{Code|IteratorSpisTresci}} ===== Funkcja uruchamiająca iterator po spisach treści innych niż spis treści główny, jego definicja: <syntaxhighlight lang="lua"> local IteratorSpisTresci=function() local liczba=1; return function() local spis_tresci=tabela_parametrow_szablonu_uklad_autonawigacji["spis treści "..liczba]; liczba=liczba+1; return spis_tresci; end; end; </syntaxhighlight> Funkcja wykorzystuje tablicę parametrów autonawigacji ze strony ściśle określonejz katalogu stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, iteruje co jeden numer spisu treści, tzn.: {{Code|spis treści 1}}, {{Code|spis treści 2}},..., {{Code|spis treści N}}, gdzie {{Code|N}}, to największa liczba charakteryzująca dany spis treści. W samym iteratorze liczba: {{Code|liczba}} {{Patrz|liczba-IteratorSpisTresci}}, powiększa się co jeden, aż do zakończenia limitu spisów treści, tzn do najbliżeszej przerwy lub końca przy iteracji, bo na samym końcu iterator zrzuci wynik {{Code|nil}}. ===== {{Śródtytuł|IteratorFun}}{{Code|IteratorFun}} ===== Funkcja iteruje po stronach i ich nazwach, jakie mają być wyświetlane w linkach, generowane przez {{LinkPatrz|Autonawigacja}}, ale na podstawie {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}, ustawień. Definicja skrótowa funkcji i jego funnkcji zwracanej, która jest iteratorem: <syntaxhighlight lang="lua"> local IteratorFun=function() ... ---- operacje robione przed uruchomieniem iteratora; return function() ... ---- ciało iteratora return strona,nazwa; ---- zwracane elementy; end; end; </syntaxhighlight> Definicja funkcji: {{Code|STRONA}} {{Patrz|STRONA}} i {{Code|NAZWA}} {{Patrz|NAZWA}}, są: <syntaxhighlight lang="lua"> local STRONA=function(liczba)return liczba*2-1;end; local NAZWA=function(liczba)return liczba*2;end; </syntaxhighlight> W iteratorze dostępna jest zmienna: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{Patrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, z którego uzyskujemy parametry, te wywołania są napisane w ciele iteratora, w sposób: <syntaxhighlight lang="lua"> local strona=tabela_parametrow_szablonu_uklad_autonawigacji[STRONA(liczba)]; local nazwa=tabela_parametrow_szablonu_uklad_autonawigacji[NAZWA(liczba)]; </syntaxhighlight> Iterację zaczynamy od {{Code|liczba}} {{Patrz|liczba-IteratorFun}} od jedynki, po uzyskaniu powyższych wartości, licznik (tą liczbę) powiększamy o jeden, a następnie zwracamy w iteratorze zmienne: {{Code|strona}} {{Patrz|strona}} i {{Code|nazwa}} {{Patrz|nazwa}}. ===== {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} ===== Jest to funkcja do zbierania danych z jednego ze ściśle okreslonej strony szablonu z: {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Gdy parametr z iteracji iteratorem {{Code|iter}},z którego przy jego kolejnych wywołachach otrzymujemy paraametry: {{Code|strona}} {{LinkPatrz|strona}} i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla {{LinkPatrz|strona}} jest równy wartości odpowiadającej fałszywej, wtedy funkcja zakańcza pracę. W przeciwnym wypadku te parametry są dekodowane funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem: {{Code|true}}, ale nazwa jest dekodowana, gdy ona jest niepusta. Gdy zmienna {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}} nie istnieje, to wtedy ją tworzymy, inicjując ją pustą tablicą, oraz inicjujemy tabelę artykułów dodatkowych wykorzystując funkcję {{LinkPatrz|table.insert}}: <syntaxhighlight lang="lua"> table.insert(tablista_artykulow,{[1]={"Dodatkowe artykuły",{1,nil,nil},["dodatkowe"]="tak",},[2]=nil,}); </syntaxhighlight> Następnie liczymy parametr dla danego rozdziału, tzn. liczymy {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{LinkPatrz|strona}} i {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}, czyli: <syntaxhighlight lang="lua"> strona=techniczne_modul["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]{[1]=strona,[2]=pelna_nazwa_ksiazki,}; </syntaxhighlight> ====== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ====== Jest to funkcja wsadzająca elementy do tablicy do funkcji: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local WsadzanieParametryDoTablicy=function(tabela_rozdzial_artykulow,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare)...end; </syntaxhighlight> Parametry funkcji: * {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} - tabela rozdziału i do niego artykułów, * {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} - numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony, * {{Code|tab_stare}} {{LinkPatrz|tab_stare}} - wstawiany element. Jeżeli zmienna: {{Code|dodatkowe_artykuly}} {{Patrz|dodatkowe_artykuly}} nie istnieje, to jest inicjowana tablicą pustą. Liczymy adres strony na podstawie: <syntaxhighlight lang="lua"> ---- Jeżeli zmienna jest tablicą i nie ma klucza: "["LINK"]=true", wtedy przyjmuje wartość: true, w przeciwnym wypadku: false; local czy_table_baza_artykulu=stronicowyparser_potrzebne_modul.CzyTabelaStronyWoluminuSpisuRzeczy(tab_stare[1]); ---- Nazwa artykułu lub adres strony, dla ktorej liczymy adres; local adres=czy_table_baza_artykulu and tab_stare[1][1] or tab_stare[1]; </syntaxhighlight> Liczymy czy stronajest w podręczniku, czyli: {{Code|czy_w_podreczniku}} {{Patrz|czy_w_podreczniku}} ze {{Code|tab_stare[5]}} {{Patrz|tab_stare[5]}}, a następnie kod języka i projektu, kolejno: {{Code|kod_jezyka_koncowy}} {{Patrz|kod_jezyka_koncowy}} i {{Code|kod_projektu_koncowy}} {{Patrz|kod_projektu_koncowy}}, jeżeli zmienna: {{Code|czy_table_baza_artykulu}} {{Patrz|czy_table_baza_artykulu}} jest nie równa wartości prawdziwej, to te zmienne przyjmuje wartość {{Code|nil}}, w przeciwnym wypadku kolejno wartości: {{Code|tab_stare[1][5]}} i {{Code|tab_stare[1][6]}}. Wsadzamy element do tablicy {{LinkPatrz|dodatkowe_artykuly}} przy pomocy funkcji {{LinkPatrz|table.insert}}, w sposób: <syntaxhighlight lang="lua"> table.insert(dodatkowe_artykuly,{((adres) and (kod_jezyka_koncowy or kod_projektu_koncowy) and({adres,kod_jezyka_koncowy,kod_projektu_koncowy,}) or adres),nazwa,czy_w_podreczniku,}); </syntaxhighlight> Póżniej wstawiamy element {{LinkPatrz|tab_stare}} do {{LinkPatrz|tabela_rozdzial_artykulow}} na pozycję: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LinkPatrz|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ===== Dalszy opis funkcji ===== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy,mając przetwwarzaną zmienną {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} to według: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy; numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych=WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,WsadzanieParametryDoTablicy,...,...,true,{strona,nazwa,},...,...,...,"",...,...,tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji,tablica_danych_parametrow_szablonu_strony_uklad_autonawigacji,nil,nil,...,--[[]]"*","",false,"[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]"); </syntaxhighlight> Powyżej użyto trójkropków: {{Code|...}}, bo te parametry są standardowe dla każdego wywołania. Powyżej wstawianie odbyło się przy pomocy funkcji: {{LinkŚródtytuł|WsadzanieParametryDoTablicy}}, używając: {{Code|{{sr|#WstawianieElementowychZarejestrowanychStronDoBazyWoluminu|p=StronicowyParser/SpisTreści/Tom I}}}}, w której jest tworzone {{LinkPatrz|tab_stare}}, który natomiast jest wsadzany do ogólnej tablicy rozdziałów i w nich artykułach na odpowiednią pozycję. W wstawianym elemencie ustawiamy stuczną listę z początkiem: {{Code|<nowiki>*</nowiki>}}, z numeracją pusta, i linią artykułu, którą jest link: <syntaxhighlight lang="lua"> "[[:"..strona..((parametry_modul.CzyTak(nazwa))and("|"..nazwa) or "").."]]" </syntaxhighlight> A dalej należy zaapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji ==== Liczymy adres strony głónnej podręcznika {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}} z funkcji: {{Code|{{sr|#m["NazwaModułu"]|p=Nazwy/Tom III}}}}, i sprawdzamy, czy strona istnieje na podstawie funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. Jeśli strona istnieje, wtedy liczymy, czy istnieje jego przekierowanie z funkcji: {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}},a jeżeli istnieje jego przekierowanie, to wtedy wartość tej funkcją jest stroną na którą wskaazuje to przekierowanie, oznaczmy tą zmienną {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli {{LinkPatrz|strona_spisu_tresci}} istnieje, wtedy jego nazwę dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}. Używając tabeli nazw, tzn. {{Code|tabela_nazw}} {{Patrz|tabela_nazw}}, której przydzielamy wartość pustą, liczymy kolejno {{Code|nazwa_przestrzeni2}} {{Patrz|nazwa_przestrzeni2}}, {{Code|nazwa_przestrzeni_ksiazki2}} {{Patrz|nazwa_przestrzeni_ksiazki2}} i {{Code|nazwa_ksiazki2}} {{Patrz|nazwa_ksiazki2}}, z następujących funkcji kolejno: {{Code|{{sr|#m.NAZWAPRZESTRZENI|p=Nazwy/Tom II}}}}, {{Code|{{sr|#m["NAZWAPRZESTRZENIKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, albo: {{Code|{{sr|#m["NAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}, gdy: {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, a jeżeli w całości, wtedy sprawdzamay, czy to z {{Code|2}} należą do przestrzeni nazw i niby-przestrzenu nazw książkowych. Przestrzenie ksiązkowe, to: {{Np|(main)|link=tak}}, {{Np|Wikijunior|link=tak}} oraz {{Np|User|link=tak}} w niby przestreni nazw: '''{{Np|User|link=tak}}:<użytkownik>/''' i {{Np|Project|link=tak}} w niby-przestrzeni nazw: '''{{Np|Project|link=tak}}:Brudnopis/<użytkownik>/''', jeżeli do tej przestrzeni nie należy, to funkcja kończy się z błędem (z wartością) {{Code|2}}, przeciwnie tworzona jest zmienna {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}}: <syntaxhighlight lang="lua"> adres_ksiazki_glownego_spisu_tresci={nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2,}; </syntaxhighlight> Także jest tam wywoływana funkcja {{LinkPatrz|__FUNKCJA_SPISU_RZECZY}}, jeśli istnieje: <syntaxhighlight lang="lua"> local wynik=__FUNKCJA_SPISU_RZECZY and __FUNKCJA_SPISU_RZECZY(nazwa_przestrzeni2,nazwa_przestrzeni_ksiazki2,nazwa_ksiazki2) or nil; </syntaxhighlight> Jeżeli ta funkcja nie istnieje, lub zwraca {{Code|nil}} lub nawet {{Code|1}}, wtedy funkcja zakańcza się z błędem: {{Code|1}}, przeciwnie na podstawie tego z {{Code|2}}, jest przyrównywanie tego temu bez tego, wtedy mamy nowe parametry nazw bez {{Code|2}}. I na podstawie tego liczymy nową nazwę {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}} i sprawdzamy, czy on ma przekierowanie z {{Code|{{sr|#p.PrzekierowanieDoStrony|p=Techniczne}}}}, wtedy ma nowy adres, dalej liczymy jego kod źdrudłowy z funkcji: {{Code|{{sr|#p.WikikodStrony|p=Techniczne}}}}, przy pomocy funkcji: <syntaxhighlight lang="lua"> local tekst=techniczne_modul.WikikodStrony{["przestrzeń"]="",["nazwa"]=adres_ustawien,}; </syntaxhighlight> A jeżeli taka strona nie istnieje, wtedy: {{Code|tekst}}, przyjmuje wartość: {{Code|nil}}, wtedy wywołujemy kod pojedynczego spisu treści {{Patrz|pojedyncze_wywolanie}}, czyli strony głównej podręcznika (książki): <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego spisu (strony głónej strony jako spisu treści) local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,"",czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); local tab_inne_spisy; ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and "" or {przekierowanie_spisu_tresci,"",},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Przeciwnie kodujemy ten tekst {{Code|tekst}} {{Patrz|tekst}} przy pomocy pustej tabeli: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}. Co na podstawie liczmy tego parametry szablonu o {{Code|obiekt}} {{=}} {{Code|SZABLON}}, w nim o nazwie: {{Code|{{sr|#p.uklad_autonawigacji|p=StronicowyParser/obiekty}}}}, czyli {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, również {{Code|nazwa_szablonu_uklad_autonawigacji}} {{Patrz|nazwa_szablonu_uklad_autonawigacji}} i {{Code|tabela_modyfikatorow_uklad_autonawigacji}} {{Patrz|tabela_modyfikatorow_uklad_autonawigacji}}, a także: {{Code|szablon_uklad_autonawigacji}} {{Patrz|szablon_uklad_autonawigacji}}, dalej przerywamy pętle. Jeżeli nie wykryto szablonu autonawigacji, wtedy zakańczamy funkcje jak w punkcie: {{LinkPatrz|pojedyncze_wywolanie}}. A jeżeli nie ma tabeli parametrów szablonu {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, to też podobnie. A jeżeli chcemy liczyć manualnie, wtedy musimy powiedzieć: <syntaxhighlight lang="lua"> local automat_manualny=tabela_parametrow_szablonu_uklad_autonawigacji["automat manualny"]; </syntaxhighlight> Jeżeli wartość tej zmiennej {{Code|automat_manualny}} {{Patrz|automat_manualny}}, jest nie {{Code|nil}}, i jest niepusta, to ze zmiennej {{Code|spis treści}} {{Patrz|spis treści}}, liczmy z tego nazwę książki i ona musi się zgadzać ze zmienną {{LinkPatrz|pelna_nazwa_ksiazki}}, co po zgadzaniu, liczmy nazwę artykułu nazwy artykułu, w przeciwnym wypadku mamy do czynienia ze stroną główną podręcznika, wartość pusta będzie odpowiadała stronie głównej podręcznika, co na sam koniec liczymy: <syntaxhighlight lang="lua"> ---- Zbieranie parametrów pojedynczego o policzoej nazwie artykułu spisu; local tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,sub_nazwa_spis_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); ---- Sprawdzanie, czy dodatkowy spis treści istnieje , taki jak: "Spis treści", i przekształcanie tablic otrzymanych z poprzedniego wywołania; tabela_artykulow,tab_inne_spisy=SpisRzeczy(tabela_artykulow,nil); ---- Zwracanie parametrów; return tabela_artykulow,tabela_licencji_spisu_tresci,(not przekierowanie_spisu_tresci) and sub_nazwa_spis_tresci or {przekierowanie_spisu_tresci,sub_nazwa_spis_tresci,},tab_inne_spisy,nil,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Gdy zmienna {{LinkPatrz|automat_manualny}} jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów {{LinkPatrz|Układ autonawigacji}} przy pomocy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{Code|{{lz|s=https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/pl|g=frame:preprocess|n=frame:preprocess}}}}. Ustawmy zmienną {{Code|numer}} {{LinkPatrz|numer}} na wartość {{Code|1}}. Liczymy zmienne: {{Code|bez spisów treści}} {{Patrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{Patrz|bez analizy spisów treści}} tabeli parametrów: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{LinkPatrz|spis treści}}, ze zmiennej: {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, a jeżeli ta zmienna istnieje, wtedy ją dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, z drugim parametrem {{Code|true}}, i liczymy jego adres bezwzględny z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, mając względem, którego ma liczyć, tzn. {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{LinkPatrz|pelna_nazwa_ksiazki}}, a jeżeli się zgadza, to liczymy nazwę artylułu spisu treści, przeciwnie nazwa artykułu spisu treści ma wartość pustą, wartość pusta nazwy artykułu spisu treści odpowiada stronie głównej podręcznika. W innym wypadku, gdy zmienna {{LinkPatrz|bez spisów treści}} jest niepusta, wtedy tylko uwzględniamy nazwę spisu treści jako stronę główną podręcznika. Tą zmienną jest: {{Code|nazwa_glownego_spisu}} {{LinkPatrz|nazwa_glownego_spisu}}. Gdy zmienne: {{LinkPatrz|bez spisów treści}} i {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{LinkPatrz|nazwa_glownego_spisu}}, zatem tego wywołanie wygląda tak: <syntaxhighlight lang="lua"> tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika,tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika,przekierowanie_spisu_tresci=p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_glownego_spisu,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH); </syntaxhighlight> Napiszmy przemianowania zmiennych na {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}} i {{Code|licencja}} {{Patrz|licencja}}, według: <syntaxhighlight lang="lua"> tablista_artykulow=tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; licencja=tabela_licencji_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Gdy zmienna: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}} ma wartość odpowiadającej prawidziwej, czyli to pewien łańcuch znakowy, wtedy policzmy {{LinkPatrz|nazwa_glownego_spisu}} dla tego przekierowania: <syntaxhighlight lang="lua"> nazwa_glownego_spisu={przekierowanie_spisu_tresci,nazwa_glownego_spisu,}; </syntaxhighlight> Jeśli wartość: {{Code|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}} {{Patrz|tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika}}, jest {{Code|nil}} lub {{Code|0}}, wtedy funkcja jest zakańczana w sposób: <syntaxhighlight lang="lua"> return tabela_artykulow_ksiazek_wedlug_strony_glownej_podrecznika; </syntaxhighlight> Lub przeciwnie, liczymy spis treści odpowiadającym wartością tabeli: {{LinkPatrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, zatem to policzmy, czy tak jest, schematycznie: <syntaxhighlight lang="lua"> ---- Przygotowanie spisu do wielu spisów treści; tablista_artykulow,tab_inne_spisy,numer=Spis(tablista_artykulow,nil,tab_inne_spisy,nazwa_glownego_spisu,numer); ---- Liczenie czy jest artykuł w spisie treści o nazwie typu: "Spis treści"; local artykul_spisu_rzeczy=p.CzyJestStronaInnegoGeneralnegoSpisuRzeczyArtykularnaNaGeneralnymSpiseRzeczyWePodreczniku(tablista_artykulow); if(artykul_spisu_rzeczy)then ---- Dodaje spis nowy do większego spisu, ten wykryty zaraz powyższą funkcją; tabela_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,artykul_spisu_rzeczy,numer); end; </syntaxhighlight> Uruchamiamy iterator {{Code|iter}} {{Patrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorSpisTresci}}, bez parametrów, zdefiniowanej w tym bloku, co jest ta iteracja, wtedy możemy je iterować po spisie treści w sposób: <syntaxhighlight lang="lua"> for spis_tresci in iter do .... ---- ciało iterowanej pętli; end; </syntaxhighlight> Kazdy tak uzyskany {{Code|spis_treści}} {{LinkPatrz|spis_treści}} dekodujemy funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, następnie rozwijamy adres względny na bezwzględny względem korzenia drzewa przestrzeni nazw z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, i dodajemy te spisy do głównego drzewa tablicy rozdziałów i ich artykułów przy pomocy funkcji: {{LinkŚródtytuł|InneSpisy}}, właśnie tak: <syntaxhighlight lang="lua"> tablista_artykulow,tab_inne_spisy,numer=InneSpisy(tablista_artykulow,tab_inne_spisy,spis_tresci,numer); </syntaxhighlight> Uruchommy inny iterator {{LinkPatrz|iter}} z funkcji: {{LinkŚródtytuł|IteratorFun}}, wywołanej bezparametrowo, wtedy iterację możemy napisać wykorzystujac funkcję {{LinkŚródtytuł|ZbieranieDanychStronZAutonawigacji}}, zdefiniowanej w tej pętli, działającą tak: <syntaxhighlight lang="lua"> for strona,nazwa in iter do ... ---- definicja funkcji: ZbieranieDanychStronZAutonawigacji; ZbieranieDanychStronZAutonawigacji(); end; </syntaxhighlight> Funkcja w nagłówku zwraca wielowartościowy, wtedy wynik na samym końcu zakończenia jej jest: <syntaxhighlight lang="lua"> return tablista_artykulow,licencja,nazwa_glownego_spisu,tab_inne_spisy,dodatkowe_artykuly,adres_ksiazki_glownego_spisu_tresci; </syntaxhighlight> Opis zwracanych parametrów: * {{Code|tablista_artykulow}} - jak w: {{LinkPatrz|tablista_artykulow}}, * {{Code|licencja}} - jak w: {{LinkPatrz|licencja}}, * {{Code|nazwa_glownego_spisu}} - jak w: {{LinkPatrz|nazwa_glownego_spisu}}, * {{Code|tab_inne_spisy}} - jak w: {{LinkPatrz|tab_inne_spisy}}, * {{Code|dodatkowe_artykuly}} - jak w: {{LinkPatrz|dodatkowe_artykuly}}, * {{Code|adres_ksiazki_glownego_spisu_tresci}} - jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5qnlz1i0b8enp77v1gdp8sln5plx7i9 Śpiewnik/Marsz, marsz Polonia 0 63664 546147 546057 2026-06-08T13:18:36Z Ashaio 4702 /* Słowa */ lit. 546147 wikitext text/x-wiki {{T|Śpiewnik/NawigacjaOpis}} == Muzyka == '''Autor:''' nieznany (ukraińska melodia ludowa) <score raw="1" vorbis="1"> \version "2.20.0" \header{ title = "Marsz, marsz Polonia" poet = "Słowa: autor nieznany" composer = "Muzyka: autor nieznany (melodia ludowa)" arranger = "Aranżacja: Stefan Surzyński" tagline = "" } \score{ << \new Staff \with { midiInstrument="french horn" } { \clef "violin" \time 4/4 \key a \minor \tempo "Lento" \relative a'{ \autoBeamOff a8.^\p b16 \tuplet 3/2 { c8[ b] a } e'8 c b a | gis8. b16 e8 gis, a4 e | a8. b16 \tuplet 3/2 { c8[ b] a } e'8 c b a | gis8. b16 e8 gis, a4 a | \unfoldRepeats \repeat volta 2 { c4^\f e8 c g'4. f8 | d8. d16 g8 f e8[ d] c[ b] | a8.^\p b16 \tuplet 3/2 { c8[ b] a } e'8 c b a | gis8. b16 e8 gis, a4 a8 r8 | } } } \addlyrics{ \small { Roz -- pro -- sze -- ni po wszem świe -- cie pol -- skie dzie -- ci bie -- dne, Zgro -- ma dzi -- li -- śmy się prze -- cie w_je -- dno kół -- ko zbroj -- ne. Marsz, marsz Po -- lo -- nia! Marsz dziel -- ny na -- ro -- dzie, O -- dpo -- cznie -- my po -- swej pra -- cy w_oj -- czy -- stej za -- gro -- dzie. Marsz, marsz Po -- lo -- nia! Marsz dziel -- ny na -- ro -- dzie, O -- dpo -- cznie -- my po -- swej pra -- cy w_oj -- czy -- stej za -- gro -- dzie. } } >> \layout{} \midi{} } </score> '''Źródło:''' Na podstawie: Stefan Surzyński, ''[https://polona.pl/item-view/f59f50ef-ba91-4e54-baa7-e7d710b15635?page=111 Echo polskie : największy zbiór pieśni polskich obyczajowych i okolicznościowych (...) z melodyami. T. 4]''. Tarnów, [ok. 1912], s. 106. == Słowa == '''Autor:''' nieznany<br> '''Opracowanie:''' Stefan Surzyński {{Kolumny|3| <poem> 1. Rozprószone po wszem świecie Polskie dzieci biedne, Zgromadziliśmy się przecie W jedno kółko zbrojne. ::Marsz, marsz, marsz, marsz, marsz Polacy, ::Marsz dzielny narodzie! ::Odpoczniemy po swej pracy ::W ojczystej zagrodzie. 2. Z wiosną zabrzmi trąbka nasza, Pocwałują konie, Sławą polskiego pałasza Zabrzmią nasze błonie. ::Marsz, marsz... 3. Przejdziem Litwę, przejdziem Wołyń, Popasiem w Kijowie, Zimą na węgierskim winie Staniemy w Krakowie. ::Marsz, marsz... 4. Od Krakowa bita droga, Do Warszawy wrócim, Co zastaniem z reszty wroga, Na łeb w Wisłę wrzucim. ::Marsz, marsz... 5. A od Karpat śpiew wspaniały Pójdzie aż do Dźwiny, Wiedź nas wodzu, wiedź do chwały, Wodzu nasz jedyny. ::Marsz, marsz... 6. Nad królewski gród zhańbiony Wzleci orlę białe, Hukną działa, jękną dzwony Polakom na chwałę. ::Marsz, marsz... </poem> }} '''Źródło:''' Stefan Surzyński, ''[https://polona.pl/item-view/9551bdf8-eb20-41b5-b85f-c10db4a5680d?page=188 "Harfiarz" : zbiór pieśni patryotycznych i narodowych : na cztery męskie głosy. Serya 3]''. Tarnów, 1896. S. 175–176. == Zobacz też == {{Wikisource|Marsz,_marsz_Polonia|Marsz, marsz Polonia}} * ''[https://bibliotekapiosenki.pl/utwory/Marsz_Polonia Marsz Polonia]'' w serwisie ''[https://bibliotekapiosenki.pl Cyfrowa Biblioteka Polskiej Piosenki]'' * ''[https://staremelodie.pl/piosenka/6455/Piesn_wolnosci_Marsz_marsz_Polonia Pieśń wolności - Marsz, marsz Polonia]'' w serwisie ''[https://staremelodie.pl Stare Melodie]''' bcn3nqqtw1n7t9cmyolwbpq3y9r4eln Śpiewnik/Marsz, marsz Polonia/Tekst 0 63666 546146 2026-06-08T13:18:23Z Ashaio 4702 nowa strona z tekstem pieśni 546146 wikitext text/x-wiki {{T|Śpiewnik/NawigacjaTekst}} == Wersja z ok. 1901 r. == '''Autor:''' nieznany '''Opracowanie:''' Franciszek Barański {{Kolumny|2| <poem> Jeszcze Polska nie zginęła, Choć my za morzami, Chociaż z oczów nam zniknęła, Lecz ją w sercu mamy. Wraz, wraz, tylko wraz! Gdy wolności przyjdzie czas, Amerykę rzucim I do Polski wrócim. </poem> }} '''Źródło:''' Franciszek Barański, ''[https://polona.pl/item-view/b1160f01-96bf-49af-baec-e2ebb1c214d0?page=63 Jeszcze Polska nie zginęła! : pieśni patryotyczne i narodowe. Cz. 2, Słowa]''. Lwów, [1901]. S. 56. == Wersja z ok. 1918 r. == '''Autor:''' nieznany '''Opracowanie:''' Bogusław Szul-Skjöldkrona Uwaga „Ułożony w 1918 r. w obozach ćwiczebnych w Ameryce. Razem z ochotnikami przyjechała do armii J. Hallera.” nie jest całkiem zgodna z prawdą, ponieważ pieśń występowała już w 1896 r. w polskim śpiewniku ''Harfiarz'' Stefana Surzyńskiego, wydanym w Tarnowie. {{Kolumny|3| <poem> 1. Rozprószeni po wszem świecie Bez ojczyzny ludzie, Zeszliśmy się wreszcie przecie Przy wojennym trudzie. ::Marsz, marsz, marsz, marsz, marsz Polacy! ::Marsz dzielny narodzie! ::Odpoczniemy po swej pracy ::W ojczystej zagrodzie. 2. Z wiosną zagrzmi trąbka nasza, Pocwałują konie, Sławą polskiego pałasza Zagrzmią nasze błonie. ::Marsz, marsz... 3. Przejdziem Wisłę i Wołynie, Popasiem w Kijowie, Zimą na węgierskim winie Staniemy w Krakowie. ::Marsz, marsz... 4. Od Krakowa bita droga, Na bój wiedzie krwawy, Gdy pobijem Niemca wroga, Wejdziem do Warszawy. ::Marsz, marsz... 5. Nad królewski gród zhańbiony Wzleci orlę białe, Hukną działa, jękną dzwony Polakom na chwałę. ::Marsz, marsz... 6. Hen od Karpat śpiew wspaniały Popłynie do Dźwiny, Wiedź nas wodzu, wiedź do chwały, Wodzu nasz jedyny. ::Marsz, marsz... </poem> }} '''Źródło:''' Bogusław Szul-Skjöldkrona, ''[https://polona.pl/item-view/371e734c-5829-424c-89f5-cc2e04cf5a72?page=68 Piosenki leguna tułacza]''. Warszawa, [post 1918]. S.&nbsp;61–62. 4oyzizty2qp1kb7mgpz2dk6eyw0y7rx