Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.22 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 Wikibooks:Bar 4 413 558187 557637 2026-10-01T12:42:50Z MediaWiki message delivery 18085 /* Wikidata Sitelink changes in Recent Changes and Watchlist */ nowa sekcja 558187 wikitext text/x-wiki {{Skrót|'''[[WB:BAR]]''', '''[[WB:Bot policy]]'''}}{{/Nagłówek}} <!-- =================== DYSKUSJE ========================= --> <!-- ============= Prosimy pisać poniżej ================== --> == Projekt nowej strony głównej == Zajmuję się projektem, który od dawna spędza nam sen z powiek. Jak wszystko będę miał gotowe, będzie można redagować, wstawiać, etc. W ramach [[Wikipedysta:Benjamin_E._Schneider/projektyy|tej strony]] podejmuję się działań: * przepisania kodu SG na nowoczesnego HTML-a bez rozwalania na szablony * unowocześniania interfejsu SG * zadbania o przyjazność dla użytkownika. Jeżeli będziecie mieli jakieś sugestie, napiszcie tutaj lub poprawcie na własną rękę. [[Wikipedysta:Benjamin E. Schneider|Benjamin E. Schneider]] ([[Dyskusja wikipedysty:Benjamin E. Schneider|dyskusja]]) 16:26, 6 sty 2026 (CET) == Thank You for Last Year – Join Wiki Loves Ramadan 2026 == Dear Wikimedia communities, We hope you are doing well, and we wish you a happy New Year. ''Last year, we captured light. This year, we’ll capture legacy.'' In 2025, communities around the world shared the glow of Ramadan nights and the warmth of collective iftars. In 2026, ''Wiki Loves Ramadan'' is expanding, bringing more stories, more cultures, and deeper global connections across Wikimedia projects. We invite you to explore the ''Wiki Loves Ramadan 2026'' [[m:Special:MyLanguage/Wiki Loves Ramadan 2026|Meta page]] to learn how you can participate and [[m:Special:MyLanguage/Wiki Loves Ramadan 2026/Participating communities|sign up]] your community. 📷 ''Photo campaign on '' [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan 2026|Wikimedia Commons]] If you have questions about the project, please refer to the FAQs: * [[m:Special:MyLanguage/Wiki Loves Ramadan/FAQ/|Meta-Wiki]] * [[c:Special:MyLanguage/Commons:Wiki Loves Ramadan/FAQ|Wikimedia Commons]] ''Early registration for updates is now open via the '''[[m:Special:RegisterForEvent/2710|Event page]]''''' ''Stay connected and receive updates:'' * [https://t.me/WikiLovesRamadan Telegram channel] * [https://lists.wikimedia.org/postorius/lists/wikilovesramadan.lists.wikimedia.org/ Mailing list] We look forward to collaborating with you and your community. '''The Wiki Loves Ramadan 2026 Organizing Team''' 20:44, 16 sty 2026 (CET) <!-- Wiadomość wysłana przez User:ZI Jony@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29879549 --> == <span lang="en" dir="ltr">Annual review of the Universal Code of Conduct and Enforcement Guidelines</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> I am writing to you to let you know the annual review period for the Universal Code of Conduct and Enforcement Guidelines is open now. You can make suggestions for changes through 9 February 2026. This is the first step of several to be taken for the annual review. [[m:Special:MyLanguage/Universal Code of Conduct/Annual review/2026|Read more information and find a conversation to join on the UCoC page on Meta]]. The [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee|Universal Code of Conduct Coordinating Committee]] (U4C) is a global group dedicated to providing an equitable and consistent implementation of the UCoC. This annual review was planned and implemented by the U4C. For more information and the responsibilities of the U4C, [[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Charter|you may review the U4C Charter]]. Please share this information with other members in your community wherever else might be appropriate. -- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" /> </div> 22:01, 19 sty 2026 (CET) <!-- Wiadomość wysłana przez User:Keegan (WMF)@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=29905753 --> == Sensowny tytuł podręcznika (na podstawie "Moje pierwsze akwarium") == Hej, mam problem, który spędza mi sen z powiek: tytuł podręcznika "Moje pierwsze akwarium". Na pewno super pomysł na podręcznik w naszych Wikibooks, podoba mi się. Ale ... co znaczy ten tytuł? Dlaczego nie po prostu "Akwarium" albo "Akwarium domowe"? Czy "moje" oznacza, że będzie jeszcze "twoje, nasze, ich itd.? Czy pierwsze oznacza, że będą jeszcze kolejne? Czy ten tytuł robi miejsce na jeszcze inny podręcznik o tej samej treści? Mam wielka prośbę - czy można ten tytuł zmienić na "Akwarium"? Byłoby super. Jeżeli nie da się tego zrobić programatycznie, to całą pracę związaną z przeróbką tytułu mogę wziąć na siebie. Co o tym myślicie? [[Wikipedysta:EdytaT|EdytaT]] ([[Dyskusja wikipedysty:EdytaT|dyskusja]]) 22:01, 24 sty 2026 (CET) :@[[Wikipedysta:EdytaT|EdytaT]] tak cały podręcznik i jego strony da się przynieść do nowej nazwy, aczkolwiek będzie trzeba przepatrzeć tekst, ponieważ tam nie da się zmienić automatycznie. Popieram Twoją propozycję, aby zmienić tytuł na „Akwarium”. Jeszcze dobrze jakby się wypowiedział @[[Wikipedysta:Persino|Persino]] :) [[Wikipedysta:Igor123121|Igor123121]] ([[Dyskusja wikipedysty:Igor123121|dyskusja]]) 11:09, 25 sty 2026 (CET) : {{Ping|EdytaT|Igor123121}} Macie rację! [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 11:15, 25 sty 2026 (CET) :Ja rozumiem, że "pierwsze" znaczy - "nie było wcześniej" oraz że "dla początkujących", a "moje" znaczy, że będzie wykonywał je czytelnik. Mimo to, nie widzę przeciwwskazań do zmiany nazwy. [[Wikipedysta:Wargo|Wargo]] ([[Dyskusja wikipedysty:Wargo|dyskusja]]) 12:15, 25 sty 2026 (CET) ::Hej, nie musisz mi tego tłumaczyć. Oczywiście, rozumiem "co autor miał na myśli" wybierając ten tytuł. Ale niestety brzmi on nieciekawie, żeby nie powiedzieć - infantylnie. Trochę tak, jak "Moja pierwsza czytanka", albo "Moja pierwsza malowanka". :):):) Dziękuje za twój głos i pozdrawiam serdecznie. [[Wikipedysta:EdytaT|EdytaT]] ([[Dyskusja wikipedysty:EdytaT|dyskusja]]) 13:59, 25 sty 2026 (CET) :::@[[Wikipedysta:EdytaT|EdytaT]] dokonałem przenosin :) Pozdrawiam! [[Wikipedysta:Igor123121|Igor123121]] ([[Dyskusja wikipedysty:Igor123121|dyskusja]]) 14:42, 25 sty 2026 (CET) ::::{{Ping|Igor123121|EdytaT}} Ukończyłem przenosiny użytkownika: {{Ping|Igor123121}}, książki: [[Moje pierwsze akwarium]], na: [[Akwarium]], jako dalsze potrzebne operacje, sprawdzając również linkujące... [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 15:31, 25 sty 2026 (CET) :::::Dziękuję! [[Wikipedysta:EdytaT|EdytaT]] ([[Dyskusja wikipedysty:EdytaT|dyskusja]]) 18:27, 25 sty 2026 (CET) *Samo przeniesienie popieram ale po co kasować przekierowania? A co jeśli ktoś linkował do nas? [[Wikipedysta:Marek Mazurkiewicz|Marek Mazurkiewicz]] ([[Dyskusja wikipedysty:Marek Mazurkiewicz|dyskusja]]) 06:57, 26 sty 2026 (CET) == Nazewnictwo artykułów (na podst. "Język pruski dla początkujących") == Hej, jest jeszcze jeden tytuł, który nie pasuje do innych z dziedziny języków: "Język pruski dla początkujących". Prawie wszystkie inne tytuły to po prostu "Hiszpański", "Japoński", "Szwedzki" itd. Czy można zmienić nazwę na "Pruski"? A informacja, że chodzi o początkujących wynika per se z tytułów rozdziałów. Tak też nakazują nasze Wikibookowe reguły, cyt. fragment z "Pomoc" - "Nazewnictwo"<br> ;''Przykłady poprawnych tytułów:<br>'' ''Angielski<br>'' ''Mikrobiologia<br>'' ;''Przykłady niepoprawnych tytułów:<br>'' ''Język Angielski od Podstaw<br>'' ''Historia Polski od Mieszka I do Lecha Wałęsy<br>'' ''Mikrobiologia:Wstęp do nauki o mikroorganizmach<br>'' ''Nie należy stosować w nazwach podręczników własnych określeń, specyficznych tytułów, np. "Mój przewodnik po Beskidzie Wyspowym" albo "Trudna sztuka chirurgii". Takie podtytuły mogą się ewentualnie znaleźć na stronie tytułowej lub w spisie treści.<br>'' Jeżeli nie da się tego zrobić programatycznie, to całą pracę związaną z przeróbką tytułu mogę wziąć na siebie. Co o tym myślicie? [[Wikipedysta:EdytaT|EdytaT]] ([[Dyskusja wikipedysty:EdytaT|dyskusja]]) 22:20, 26 sty 2026 (CET) :Już przeniosłem książkę: [[Język pruski dla początkujących]], pod adres: [[Pruski]], sprawdzając jednocześnie linkujące, ale na szczęście ich nie było. [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 23:10, 26 sty 2026 (CET) ::Linkujace w wikimediach to nie wszystko. Mógłbyś zostawiać przekierowania? [[Wikipedysta:Marek Mazurkiewicz|Marek Mazurkiewicz]] ([[Dyskusja wikipedysty:Marek Mazurkiewicz|dyskusja]]) 07:49, 28 sty 2026 (CET) : Dziękuję! {{Brak podpisu|EdytaT}} == Tłumaczenie książek przez AI == Co o tym myślicie? Mam coś na kształt książki na temat języka Scheme: * https://lips.js.org/docs/category/introduction-to-scheme Myślałem, aby przetłumaczyć na język polski. Treść jest na licencji CC-BY-SA. Na stronie [[Lisp]] jest bardzo mało treści. Mój tekst jest nawet bardziej kompletny niż [[:en:Scheme Programming]]. Nie wiem, czy znajdę czas, aby przetłumaczyć ręcznie. [[Wikipedysta:Jcubic|Jcubic]] ([[Dyskusja wikipedysty:Jcubic|dyskusja]]) 22:15, 17 mar 2026 (CET) * Nawet dobry sposób, można w ten właśnie sposób przetłumaczyć tę pozycję... [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 22:18, 17 mar 2026 (CET) == <span lang="en" dir="ltr">Upcoming deployment of CampaignEvents extension to Wikibooks</span> == <div lang="en" dir="ltr"> <section begin="message"/> Hello everyone, We are writing to inform you that the [[mw:Help:Extension:CampaignEvents|CampaignEvents extension]] will be deployed to all Wikibooks projects during the week of '''23 March 2026'''. This follows last year’s broader rollout across Wikimedia projects. We realized that Wikibooks was not included at the time, and we’re now addressing that to ensure consistency across all communities. The CampaignEvents extension provides tools to support event and campaign organization on-wiki, including features like on-wiki event registration and collaboration lists(global event list). We welcome any questions, feedback, or concerns you may have. We are also happy to support anyone interested in trying out the tools. ''Apologies if this message is not in your preferred language. If you’re able to help translate it for your community, please feel free to do so.'' <section end="message"/> </div> <bdi lang="en" dir="ltr">[[User:Udehb-WMF|Udehb-WMF]] ([[User talk:Udehb-WMF|dyskusja]]) 19:22, 19 mar 2026 (CET)</bdi> <!-- Wiadomość wysłana przez User:Udehb-WMF@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=User:Udehb-WMF/sandbox/MM_target&oldid=30284073 --> == Action Required: Update templates/modules for electoral maps (Migrating from P1846 to P14226) == Hello everyone, This is a notice regarding an ongoing data migration on Wikidata that may affect your election-related templates and Lua modules (such as <code>Module:Itemgroup/list</code>). '''The Change:'''<br /> Currently, many templates pull electoral maps from Wikidata using the property [[:d:Property:P1846|P1846]], combined with the qualifier [[:d:Property:P180|P180]]: [[:d:Q19571328|Q19571328]]. We are migrating this data (across roughly 4,000 items) to a newly created, dedicated property: '''[[:d:Property:P14226|P14226]]'''. '''What You Need To Do:'''<br /> To ensure your templates and infoboxes do not break or lose their maps, please update your local code to fetch data from [[:d:Property:P14226|P14226]] instead of the old [[:d:Property:P1846|P1846]] + [[:d:Property:P180|P180]] structure. A [[m:Wikidata/Property Migration: P1846 to P14226/List|list of pages]] was generated using Wikimedia Global Search. '''Deadline:'''<br /> We are temporarily retaining the old data on [[:d:Property:P1846|P1846]] to allow for a smooth transition. However, to complete the data cleanup on Wikidata, the old [[:d:Property:P1846|P1846]] statements will be removed after '''May 1, 2026'''. Please update your modules and templates before this date to prevent any disruption to your wiki's election articles. Let us know if you have any questions or need assistance with the query logic. Thank you for your help! [[User:ZI Jony|ZI Jony]] using [[Wikipedysta:MediaWiki message delivery|MediaWiki message delivery]] ([[Dyskusja wikipedysty:MediaWiki message delivery|dyskusja]]) 19:11, 3 kwi 2026 (CEST) <!-- Wiadomość wysłana przez User:ZI Jony@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=29941252 --> == Request for comment (global AI policy) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies for writing in English. {{int:Please-translate}} A [[:m:Requests for comment/Artificial intelligence policy|request for comment]] is currently being held to decide on a global AI policy. {{int:Feedback-thanks-title}} [[Wikipedysta:MediaWiki message delivery|MediaWiki message delivery]] ([[Dyskusja wikipedysty:MediaWiki message delivery|dyskusja]]) 02:57, 26 kwi 2026 (CEST) </bdi> <!-- Wiadomość wysłana przez User:Codename Noreste@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30424282 --> == <span lang="en" dir="ltr">Vote now in the 2026 U4C election</span> == <div lang="en" dir="ltr"> <section begin="announcement-content" /> Eligible voters are asked to participate in the 2026 [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee]] election. More information–including an eligibility check, voting process information, candidate information, and a link to the vote–are available on Meta at the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|2026 Election information page]]. The vote closes on 2 June 2026 at [https://zonestamp.toolforge.org/1780358400 00:00 UTC]. Please vote if your account is eligible. Results will be available by 14 June 2026. -- In cooperation with the U4C,<section end="announcement-content" /> </div> [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]]) 19:14, 27 maj 2026 (CEST) <!-- Wiadomość wysłana przez User:Keegan (WMF)@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == RFC about AI-generated content in Wikimedia Commons == <bdi lang="en" dir="ltr">Apologies for writing in English, please help translate this message to your language. You are invited to participate in a [[c:Commons:Requests for comment/Policy update for AI content|request for comment on Wikimedia Commons about a policy update for AI content]]. This may affect files that are uploaded to Wikimedia Commons for use on this project. Thank you. [[m:User:Codename Noreste|Codename Noreste]] ([[m:User talk:Codename Noreste|dyskusja]])</bdi> 19:11, 23 cze 2026 (CEST) <!-- Wiadomość wysłana przez User:Codename Noreste@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == <span lang="en" dir="ltr">Deployment of Legal and Safety Contacts Link in the Footer of Your Wiki</span> == <div lang="en" dir="ltr"> <section begin="Message"/> '''Legal & Safety Contacts''' Hello community, the Wikimedia Foundation has provided a [[wmf:Special:MyLanguage/Legal:Wikimedia Foundation Legal and Safety Contact Information|single legal and safety contact page]], to be linked in the footer of your wiki, to ensure access to accurate legal information. This is a regulatory requirement. We have already rolled out links to English, German, Italian, Spanish and other wikis and we will deploy to your wiki soon. [[m:Special:MyLanguage/Wikimedia_Foundation_Legal_and_Safety_Contacts_FAQ|Please read more on the project page]] and leave any comments in this thread or on the [[m:Special:MyLanguage/Talk:Wikimedia Foundation Legal and Safety Contacts FAQ|talk page]]. <section end="Message"/> </div> -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 15:30, 25 cze 2026 (CEST) <!-- Wiadomość wysłana przez User:Sannita (WMF)@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=User:Sannita_(WMF)/Mass_sending_test&oldid=30731267 --> == Request for comment (the future of Abstract Wikipedia) == <bdi lang="en" dir="ltr" class="mw-content-ltr"> Apologies if this has not yet been translated into your wiki's language. {{int:Please-translate}} You are invited to voice your opinions in a [[:m:Requests for comment/The future of Abstract Wikipedia|request for comment about the future of Abstract Wikipedia]]. {{Int:Feedback-thanks-title}} [[:m:User:Kowal2701|Kowal2701]] ([[:m:User talk:Kowal2701|talk]]) 14:24, 24 lip 2026 (CEST) </bdi> <!-- Wiadomość wysłana przez User:DreamRimmer@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Global_message_delivery&oldid=30513860 --> == Przełączenie serwerowni – Wasza wiki będzie niedługo w trybie tylko do odczytu == <section begin="server-switch"/><div class="plainlinks"> [[:m:Special:MyLanguage/Tech/Server switch|Przeczytaj w innym języku]] • [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-Tech%2FServer+switch&language=&action=page&filter= {{int:please-translate}}] [[foundation:|Wikimedia Foundation]] przełączy ruch na inną swoją serwerownię. Upewni to nas, że Wikipedia i inne strony Wikimedia będą zawsze online, nawet w przypadku kataklizmu. Cały ruch zostanie przełączony '''{{#time:j xg|2026-09-23|pl}}'''. Przełączanie rozpocznie się o '''[https://zonestamp.toolforge.org/{{#time:U|2026-09-23T14:00|en}} {{#time:H:i e|2026-09-23T14:00}}]''' (17:00 CEST). Niestety, z powodu niektórych ograniczeń w [[mw:Special:MyLanguage/Manual:What is MediaWiki?|MediaWiki]], wszystkie operacje edycyjne muszą zostać przerwane podczas przełączenia. Przepraszamy za te utrudnienia. Będziemy pracować nad tym, aby je zminimalizować w przyszłości. Na wszystkich wiki na 30 minut przed zostanie wyświetlony banner, zanim ta operacja się zacznie. Będzie on widoczny aż do końca operacji przełączenia serwerowni. <span lang="en" dir="ltr" class="mw-content-ltr">You can contribute to the [https://meta.wikimedia.org/w/index.php?title=Special%3ATranslate&group=Centralnotice-tgroup-read_only_banner&task=view&language=&filter=&action=translate translation or proofreading] of this banner text.</span> '''Każdą wiki przez krótki czas będzie można tylko czytać, ale nie edytować.''' * Edytowanie nie będzie możliwe {{#time:j xg Y (l)|2026-09-23|pl}} przez maksymalnie godzinę. * Jeżeli spróbujesz edytować lub zapisywać zmiany w tym czasie, zobaczysz komunikat o błędzie. Mamy nadzieję, że żadne edycje nie zostaną utracone podczas tego czasu, ale nie możemy tego zagwarantować. Jeżeli zauważysz komunikat o błędzie, poczekaj aż wszystko wróci do normy. Będzie wtedy możliwe zapisanie zmian. Zalecamy jednak zrobienie kopii swoich zmian, na wszelki wypadek. ''Inne skutki'': * Zadania w tle będą wolniejsze, a niektóre mogą być przerywane. Czerwone linki mogą nie być aktualizowane tak szybko, jak zwykle. Jeżeli utworzysz artykuł, do którego prowadzi jakiś link, to ten link będzie dłużej czerwony niż zwykle. Część skryptów, uruchamiających się na dłużej, zostanie zatrzymanych. * Oczekujemy, że wdrożenia kodu będą miały miejsce jak w każdym innym tygodniu. Jednakże poszczególne fragmenty kodu mogą się zawiesić, jeżeli dana operacja będzie ich później potrzebować. * [[mw:Special:MyLanguage/GitLab|GitLab]] będzie niedostępny przez około 90 minut. W razie konieczności terminy testu mogą się przesunąć. Możesz [[wikitech:Switch_Datacenter|zapoznać się z harmonogramem na wikitech.wikimedia.org]]. Wszelkie zmiany będą ogłoszone w tymże harmonogramie. '''Prosimy, podziel się tą informacją ze swoją społecznością.'''</div><section end="server-switch"/> [[m:user:Trizek (WMF)|Trizek (WMF)]] 14:58, 15 wrz 2026 (CEST) <!-- Wiadomość wysłana przez User:Trizek (WMF)@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=Distribution_list/Non-Technical_Village_Pumps_distribution_list&oldid=30513874 --> == Your feedback wanted: Remove ''(Language link added:) and similar'' edits from Special:RecentChanges == ''(Apologies for posting in English. You can help by translating it)'' Hello, I’m Danny from [[:en:w:Wikimedia_Deutschland|Wikimedia Deutschland’s]] [[m:Wikidata_For_Wikimedia_Projects|Wikidata For Wikimedia Projects]] team.<br/> We have been investigating and examining how Wikidata’s use in the [[Special:RecentChanges]] and [[Special:Watchlist]] pages can be made to be more useful, or less ‘noisy’ (fewer edits that have little value to the reader). We are currently exploring to make a change in the volume and the type of Wikidata edits that appear in these pages, and '''we need your feedback''' to help us ensure this is a positive change for the Wikis and won’t disrupt your workflows.<br/> Language links are also known as sitelinks or interlanguage links and describe when a Wikidata item is connected to a Wiki, adding it to the language dropdown tool for other connected Wikis. [[File:Types of Lang Link changes.png|x350px|frame|A variety of "Language Link" edits as seen in the Recent Changes feed]] The request for feedback is whether you support the removal of these language link edits from the Recent Changes and Watchlist feed, or would you oppose such a change and if so, why? Please share you thoughts on the dedicated '''[[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|metawiki Talk page]]'''. Further information about this change: [[m:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|m:Wikidata_For_Wikimedia_Projects/Hide_Language_Link_edits]] Thank you for any participation or feedback you give, -- [[m:User:Danny_Benjafield_(WMDE)|User:Danny Benjafield (WMDE)]] 13:46, 25 wrz 2026 (CEST) <!-- Wiadomość wysłana przez User:Danny Benjafield (WMDE)@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31080832 --> == Wikidata Sitelink changes in Recent Changes and Watchlist == ''(Apologies for cross-posting in English, translating it will help spread the message)'' Editors on group 1 wikis, including Wikiquote, Wikibooks, Wikiversity, Wikivoyage, and Wikisource, will no longer see notifications on [[Special:RecentChanges|Recent Changes]] and [[Special:Watchlist|Watchlist]] when a link to ''another'' language version of a page is added, removed, or changed in its Wikidata item. This change will begin on '''October 5 at 07:00 UTC''' as a two-week trial to reduce high-volume, low-value notifications and make higher-value changes easier to identify. Editors who rely on these notifications should be aware of the change and can share feedback or concerns on the [[m:Wikidata For Wikimedia Projects/Clearer Wikidata Edit Summaries/Hide Language Link edits|project]] or [[m:Talk:Wikidata_For_Wikimedia_Projects/Clearer_Wikidata_Edit_Summaries/Hide_Language_Link_edits|talk page]].<br/>Please reach out if you have any questions, thank you! -- [[User:Danny_Benjafield_(WMDE)|Danny Benjafield (WMDE)]] ([[User_talk:Danny_Benjafield_(WMDE)|talk]]) sent via [[Wikipedysta:MediaWiki message delivery|MediaWiki message delivery]] ([[Dyskusja wikipedysty:MediaWiki message delivery|dyskusja]]) 14:42, 1 paź 2026 (CEST) <!-- Wiadomość wysłana przez User:Danny Benjafield (WMDE)@metawiki przy użyciu listy na https://meta.wikimedia.org/w/index.php?title=User:Danny_Benjafield_(WMDE)/MassMessage_test_list&oldid=31106967 --> ki7wsoh2eswa78402ttk9vwrhvkyyqm MediaWiki:Histlegend 8 32922 558209 382020 2026-10-01T16:39:23Z Persino 2851 558209 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[https://authors.toolforge.org/?page_name={{FULLPAGENAMEE}} Lista autorów(-ek)] • [https://xtools.wmcloud.org/articleinfo/pl.wikipedia.org/{{FULLPAGENAMEE}}?uselang=pl Statystyki historii edycji] • [https://wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikipedia&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [https://pageviews.wmcloud.org/?project=pl.wikipedia.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnice ze starszą wersją'' {{#switch:{{NAMESPACE}} ||Szablon=<br />Kolor tła: {{int:flaggedrevs-color-1}}, {{int:flaggedrevs-pending}} }} |} c1r9cxcrmblknz3apze1ypdlrvdqb79 558210 558209 2026-10-01T16:42:02Z Persino 2851 558210 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[https://authors.toolforge.org/?page_name={{FULLPAGENAMEE}} Lista autorów(-ek)] • [https://xtools.wmcloud.org/articleinfo/pl.wikipedia.org/{{FULLPAGENAMEE}}?uselang=pl Statystyki historii edycji] • [https://wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikipedia&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [https://pageviews.wmcloud.org/?project=pl.wikipedia.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnice ze starszą wersją''<!-- {{#switch:{{NAMESPACE}}||Wiijunior|Szablon=<br />Kolor tła: {{int:flaggedrevs-color-1}}, {{int:flaggedrevs-pending}} }}--> |} c2zxmw5g58s6r5m1l52fvnlhw06p6dm 558211 558210 2026-10-01T16:44:45Z Persino 2851 558211 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[https://authors.toolforge.org/?page_name={{FULLPAGENAMEE}} Lista autorów(-ek)] • [https://xtools.wmcloud.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Statystyki historii edycji] • [https://wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [https://pageviews.wmcloud.org/?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnice ze starszą wersją''<!-- {{#switch:{{NAMESPACE}}||Wiijunior|Szablon=<br />Kolor tła: {{int:flaggedrevs-color-1}}, {{int:flaggedrevs-pending}} }}--> |} b1itn4yk6ke69u1dh57oorf244qsy5c 558212 558211 2026-10-01T17:01:57Z Persino 2851 558212 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[https://xtools.wmflabs.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Lista autorów strony] • [https://xtools.wmcloud.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Statystyki historii edycji] • [https://wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [https://pageviews.wmcloud.org/?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnice ze starszą wersją''<!-- {{#switch:{{NAMESPACE}}||Wiijunior|Szablon=<br />Kolor tła: {{int:flaggedrevs-color-1}}, {{int:flaggedrevs-pending}} }}--> |} nkaakv8ae1apw15fj6llgk707nr2ag5 558213 558212 2026-10-01T17:05:35Z Persino 2851 Wycofano edycje użytkownika [[Special:Contributions/Persino|Persino]] ([[User talk:Persino|dyskusja]]). Autor przywróconej wersji to [[User:Wargo|Wargo]]. 382020 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[//xtools.wmflabs.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Lista autorów i statystyki] • [http://wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [//pageviews.toolforge.org?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnica ze starszą wersją'' |} rjjgd69yc27mpilsmc8lzdnyvmbs21r 558214 558213 2026-10-01T17:06:24Z Persino 2851 558214 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[//xtools.wmflabs.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Lista autorów i statystyki] • [//wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [//pageviews.toolforge.org?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnica ze starszą wersją'' |} 5ybfaazxme4tsyj1qhztiy980o7fgho 558215 558214 2026-10-01T17:19:24Z Persino 2851 558215 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[//copyvios.toolforge.org/?lang=pl&project=wikibooks&title={{FULLPAGENAME}}&oldid=&action=search&use_engine=1&use_links=1 Detektor kopiowania] • [//wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [//pageviews.toolforge.org?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnica ze starszą wersją'' |} 2bzsben82b03ah7ytmneccas85t6cew 558216 558215 2026-10-01T17:20:44Z Persino 2851 558216 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[//copyvios.toolforge.org/?lang=pl&project=wikibooks&title={{FULLPAGENAME}}&oldid=&action=search&use_engine=1&use_links=1 Detektor kopiowania] • [//xtools.wmflabs.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Lista autorów i statystyki] • [http://wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [//pageviews.toolforge.org?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnica ze starszą wersją'' |} jezfpcb3sozat4108qdkfr0yf4uuv6r 558217 558216 2026-10-01T17:22:36Z Persino 2851 558217 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[//copyvios.toolforge.org/?lang=pl&project=wikibooks&title={{FULLPAGENAME}}&oldid=&action=search&use_engine=1&use_links=1 Detektor kopiowania] • [//xtools.wmflabs.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Lista autorów i statystyki] • [//wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [//pageviews.toolforge.org?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnica ze starszą wersją'' |} 9x278wl6j5avjcr14ctmu3er8epc9su 558218 558217 2026-10-01T17:24:27Z Persino 2851 558218 wikitext text/x-wiki {| id="history-toolbox" class="mw-toolbox plainlinks noeditsection" | style="padding-right: 1em;" | {{ikona|copyleft|35}} | Jest to lista [[w:Pomoc:Wersja strony|wersji tej strony]] oraz porównanie wkładu każdego autora. Kliknij na datę, aby wyświetlić wybraną wersję.<br />[//copyvios.toolforge.org/?lang=pl&project=wikibooks&title={{FULLPAGENAMEE}}&oldid=&action=search&use_engine=1&use_links=1 Detektor kopiowania] • [//xtools.wmflabs.org/articleinfo/pl.wikibooks.org/{{FULLPAGENAMEE}}?uselang=pl Lista autorów i statystyki] • [//wikipedia.ramselehof.de/wikiblame.php?user_lang=pl&lang=pl&project=wikibooks&article={{FULLPAGENAMEE}} Wyszukiwanie w historii edycji] • [//pageviews.toolforge.org?project=pl.wikibooks.org&range=latest-30&pages={{FULLPAGENAMEE}} Statystyka oglądalności strony] • [{{fullurl:{{FULLPAGENAMEE}}|action=info}}#mw-pageinfo-watchers Liczba obserwujących]<br />(bież.) – ''różnice z najnowszą wersją'', (poprz.) – ''różnica ze starszą wersją'' |} 4wlq3wh1c246jf3q71xkdcjk95aao6z Moduł:StronicowyParser/Tekst 828 58886 558269 557619 2026-10-02T11:10:47Z Persino 2851 558269 Scribunto text/plain local p={} function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu); if(nazwy_np_modul.Module==nazwa_przestrzeni)then local techniczne_modul=require("Module:Techniczne"); local nazwa_modulu_opisu=techniczne_modul["PełnaNazwaOpisuModułu"](nazwa_modulu); if(nazwa_modulu_opisu~=nazwa_modulu)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; else local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; end; elseif(nazwy_np_modul.Template~=nazwa_przestrzeni)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; elseif(nazwy_np_modul.Template==nazwa_przestrzeni)then if(mw.ustring.match(nazwa_modulu,"^[^:]+:(.*/opis)%s*$"))then local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; local szablonowe_modul=require("Module:Szablonowe"); local ramka_modul=require("Module:Ramka"); local tablica_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then local nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["NazwaSzablonuWywołania"](szablon); if(szablonowe_modul.CzyModyfikatoryInstrukcjiWarunkowychSzablonowych(tabela_modyfikatorow))then return ramka_modul.InstrukcjeWarunkowe(szablon); end; end; end); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; else local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,inkludowana and true or dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; if(inkludowana)then tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst_artykulu_caly; return tekst_artykulu_caly; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local ramka_modul=require("Module:Ramka"); local tablica_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); local opis=nazwa_modulu.."/opis"; local przekierowanie_opis=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_istniejacych_zbiorow,tabela_uchwytow_stron=techniczne_modul.PoliczZbiory{[1]=opis,tekst=true,}; if(liczba_istniejacych_zbiorow>0)then przekierowanie_opis=techniczne_modul.PrzekierowanieDoStrony(opis); else opis=nil; end; ---- local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu,nazwa_modulu_szablonowa) or nil; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu_szablonowa,function(tablica_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- if(stronicowyparser_obiekty_modul.szablony_dokumentacji[nazwa_szablonu])then local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tablica_parametrow_szablonu); if(not czy_nie_brak_parametrow)then local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; else local nazwa_strony_opisu=tablica_parametrow_szablonu[1]; local zawartosc=tablica_parametrow_szablonu["zawartość"]; ---- local czy_nazwa_strony_opisu=parametry_modul.CzyTak(nazwa_strony_opisu); local czy_zawartosc=parametry_modul.CzyTak(zawartosc); if((czy_nazwa_strony_opisu)and(not czy_zawartosc))then local opis_tak=((opis) and (nazwa_strony_opisu==opis)); local nazwa_strony_opisu_czy_przekierowanie=opis_tak and (przekierowanie_opis or nazwa_strony_opisu) or (techniczne_modul.PrzekierowanieDoStrony (nazwa_strony_opisu) or nazwa_strony_opisu); if((opis)and((opis_tak)or((przekierowanie_opis)and(nazwa_strony_opisu==przekierowanie_opis))))then opis=nil;end; ---- local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony_opisu_czy_przekierowanie,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; elseif(czy_zawartosc)then return zawartosc; else local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; end; end; else if(opis)then local pelna_nazwa_szablonu=szablonowe_modul["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu); if((opis==pelna_nazwa_szablonu)or((przekierowanie_opis)and(przekierowanie_opis==pelna_nazwa_szablonu)))then opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or pelna_nazwa_szablonu,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; end; end; end; end,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ramka_modul.InstrukcjeWarunkowe(szablon); end,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,czy_uwzgledniac_modyfikatory,czy_z_kluczem); end; end, function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end); end; end,nil,nil,nil,function(tekst_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul) if((not inkludowana)and(opis))then local szablony_magiczne={}; opis=przekierowanie_opis or opis; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,opis,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA); return tekst_artykulu_opisu; end; end,nil,nil,nil,__FUNKCJA_PARAMETRY); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; end; end; end; function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local tablica_obiektow_strony_dany_modul_uzyskany=nil; local tablica_parametrow_szablonu_strony={}; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:techniczne"); local nazwy_modul=require("Module:Nazwy"); local parametry_modul=require("Module:Parametry"); local tekst_rozwiniety_calego_artykulu=p.SpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,true,inkludowana, function(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_niezakodowana) tablica_obiektow_strony_dany_modul=tablica_obiektow_strony_dany_modul or {}; tablica_obiektow_strony_dany_modul_uzyskany=tablica_obiektow_strony_dany_modul; if(not tekst_rozwiniety_calego_artykulu)then return;end; local __self=szablonowe_modul:TablicaTransportuSzablonowe(); --if((__self)and(tablica_obiektow_strony_dany_modul)and(not czy_niezakodowana))then --if(not __self.tablica_obiektow_strony_dany_modul)then __self.tablica_obiektow_strony_dany_modul={};end; --__self.tablica_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca]=tablica_obiektow_strony_dany_modul; --end; tekst_rozwiniety_calego_artykulu=tekst_rozwiniety_calego_artykulu and szablonowe_modul[czy_niezakodowana and "RozwijanieNiezakodowanegoSzablonu" or "RozwijanieZakodowanegoSzablonu"](__self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony, stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) local __metatabelka=getmetatable(tabela_parametrow_szablonu); if(__metatabelka)then local PobierzCzyJestPustaTabelka=__metatabelka.PobierzCzyJestPustaTabelka; if(PobierzCzyJestPustaTabelka)then return PobierzCzyJestPustaTabelka(); end; return false; else local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tabela_parametrow_szablonu); if(czy_nie_brak_parametrow)then return true;end; end; end, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](pelna_nazwa_szablonu); if(nazwa_artykulu=="")then return true; end; local strona=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu); if(strona)then if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona); if(nazwa_artykulu=="")then return true; end; end; end, __FUNKCJA, __FUNKCJA2, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,false) or nil; end,__FUNKCJA_PARAMETRY) or nil; return tekst_rozwiniety_calego_artykulu; end, function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) return nil; end,function(nazwa_modulu,nazwa_modulu_szablonowa) return tablica_parametrow_szablonu_strony; end,stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,true) or nil; end,__FUNKCJA_PARAMETRY); ---- return tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_dany_modul_uzyskany,tablica_parametrow_szablonu_strony; end; function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY) local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^[_%s]*$"); local uchwyt_strony; local tekst_artykulu; local nazwa_strony_bez_kodow_html; local parametry_modul=require("Module:Parametry"); if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then --- local html_modul=require("Module:Html"); nazwa_strony_bez_kodow_html=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](nazwa_strony); local szablonowe_modul=require("Module:Szablonowe"); local pudelko_modul=require("Module:Pudełko"); local czy_nazwa_niepoprawna=pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_strony_bez_kodow_html); if(czy_nazwa_niepoprawna)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony niepoprawna"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony niepoprawna"); end; end; mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego zawartości: "..nazwa_strony.."."); return nil; end; --- local nazwa_strony_z_kodami_html=html_modul["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"](nazwa_strony); local czy_istnieje; local techniczne_modul=require("Module:Techniczne"); uchwyt_strony,tekst_artykulu,czy_istnieje = techniczne_modul.CzyStronaIstniejeJejParametry(nazwa_strony_z_kodami_html,true); if(not uchwyt_strony)then mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego uchwytu: "..(parametry_modul["CzyTakCiąg"](nazwa_modulu) and nazwa_modulu or "(nazwa pusta)").."."); if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"); end; end; return nil; end; if(not czy_istnieje)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"strona nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"strona nie istnieje"); end; end; return nil; else local czy_nie_istnieje_zawartosc=((uchwyt_strony)and(not tekst_artykulu)); if(czy_nie_istnieje_zawartosc)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"zawartość strony nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"zawartość strony nie istnieje"); end; end; return nil; end; end; else if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"); end; end; return nil; end; if(not czy_szablon)then if(czy_noinclude)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1"); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); else tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->.-<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->(.-)<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","%1"); end; tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>(.-)</[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>",""); ----- tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]%s->",""); elseif(parametry_modul.TypeFunction(czy_szablon))then tekst_artykulu=czy_szablon(tekst_artykulu,czy_noinclude); end; ---- --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"\n[^%S\n]*<!%-%-(.-)%-%->[^%S\n]*\n","\n"); local techniczne_modul=require("Module:Techniczne"); tekst_artykulu=__FUNKCJA_KOMENTARZE and (__FUNKCJA_KOMENTARZE(tekst_artykulu)) or techniczne_modul.UsuwanieKomentarzowe(tekst_artykulu); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); local tabela_nazw={}; if(szablony_magiczne)then local nazwy_modul=require("Module:Nazwy"); szablony_magiczne["{{ROOTPAGENAME}}"]=szablony_magiczne["{{ROOTPAGENAME}}"] or nazwy_modul["NAZWAKORZENIASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{NAMESPACE}}"]=szablony_magiczne["{{NAMESPACE}}"] or nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{PAGENAME}}"]=szablony_magiczne["{{PAGENAME}}"] or nazwy_modul["NAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{FULLPAGENAME}}"]=szablony_magiczne["{{FULLPAGENAME}}"] or nazwy_modul["PEŁNANAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{SUBPAGENAME}}"]=szablony_magiczne["{{SUBPAGENAME}}"] or nazwy_modul["NAZWASUBSTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); end; if(szablony_magiczne)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne); local ramka_modul=require("Module:Ramka"); tekst_artykulu=ramka_modul.InstrukcjeWarunkowe(tekst_artykulu); end; ---- tekst_artykulu=__FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) or tekst_artykulu; tekst_artykulu=__FUNKCJA_KONTROLNE and __FUNKCJA_KONTROLNE(tekst_artykulu) or tekst_artykulu; ---- if(not szablon_nie_opis)then if(not dokumentacja)then local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu,nazwa_strony2 or nazwa_strony,nil,nil,nil,nil,nil,nil,nil,nil,nil,__FUNKCJA_PARAMETRY); end; end; return tekst_artykulu; end; return p; 60gkfxcy4kb4q1zccghb7yioekg6q22 558270 558269 2026-10-02T11:14:40Z Persino 2851 558270 Scribunto text/plain local p={} function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu); if(nazwy_np_modul.Module==nazwa_przestrzeni)then local techniczne_modul=require("Module:Techniczne"); local nazwa_modulu_opisu=techniczne_modul["PełnaNazwaOpisuModułu"](nazwa_modulu); if(nazwa_modulu_opisu~=nazwa_modulu)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; else local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; end; elseif(nazwy_np_modul.Template~=nazwa_przestrzeni)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; elseif(nazwy_np_modul.Template==nazwa_przestrzeni)then if(mw.ustring.match(nazwa_modulu,"^[^:]+:(.*/opis)%s*$"))then local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; local szablonowe_modul=require("Module:Szablonowe"); local ramka_modul=require("Module:Ramka"); local tablica_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then local nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["NazwaSzablonuWywołania"](szablon); if(szablonowe_modul.CzyModyfikatoryInstrukcjiWarunkowychSzablonowych(tabela_modyfikatorow))then return ramka_modul.InstrukcjeWarunkowe(szablon); end; end; end); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; else local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,inkludowana and true or dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; if(inkludowana)then tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst_artykulu_caly; return tekst_artykulu_caly; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local ramka_modul=require("Module:Ramka"); local tablica_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); local opis=nazwa_modulu.."/opis"; local przekierowanie_opis=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_istniejacych_zbiorow,tabela_uchwytow_stron=techniczne_modul.PoliczZbiory{[1]=opis,tekst=true,}; if(liczba_istniejacych_zbiorow>0)then przekierowanie_opis=techniczne_modul.PrzekierowanieDoStrony(opis); else opis=nil; end; ---- local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu,nazwa_modulu_szablonowa) or nil; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu_szablonowa,function(tablica_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- if(stronicowyparser_obiekty_modul.szablony_dokumentacji[nazwa_szablonu])then local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tablica_parametrow_szablonu); if(not czy_nie_brak_parametrow)then local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; else local nazwa_strony_opisu=tablica_parametrow_szablonu[1]; local zawartosc=tablica_parametrow_szablonu["zawartość"]; ---- local czy_nazwa_strony_opisu=parametry_modul.CzyTak(nazwa_strony_opisu); local czy_zawartosc=parametry_modul.CzyTak(zawartosc); if((czy_nazwa_strony_opisu)and(not czy_zawartosc))then local opis_tak=((opis) and (nazwa_strony_opisu==opis)); local nazwa_strony_opisu_czy_przekierowanie=opis_tak and (przekierowanie_opis or nazwa_strony_opisu) or (techniczne_modul.PrzekierowanieDoStrony (nazwa_strony_opisu) or nazwa_strony_opisu); if((opis)and((opis_tak)or((przekierowanie_opis)and(nazwa_strony_opisu==przekierowanie_opis))))then opis=nil;end; ---- local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony_opisu_czy_przekierowanie,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; elseif(czy_zawartosc)then return zawartosc; else local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; end; end; else if(opis)then local pelna_nazwa_szablonu=szablonowe_modul["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu); if((opis==pelna_nazwa_szablonu)or((przekierowanie_opis)and(przekierowanie_opis==pelna_nazwa_szablonu)))then opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or pelna_nazwa_szablonu,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; end; end; end; end,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ramka_modul.InstrukcjeWarunkowe(szablon); end,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,false,false); end; end, function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end); end; end,nil,nil,nil,function(tekst_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul) if((not inkludowana)and(opis))then local szablony_magiczne={}; opis=przekierowanie_opis or opis; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,opis,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA); return tekst_artykulu_opisu; end; end,nil,nil,nil,__FUNKCJA_PARAMETRY); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; end; end; end; function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local tablica_obiektow_strony_dany_modul_uzyskany=nil; local tablica_parametrow_szablonu_strony={}; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:techniczne"); local nazwy_modul=require("Module:Nazwy"); local parametry_modul=require("Module:Parametry"); local tekst_rozwiniety_calego_artykulu=p.SpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,true,inkludowana, function(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_niezakodowana) tablica_obiektow_strony_dany_modul=tablica_obiektow_strony_dany_modul or {}; tablica_obiektow_strony_dany_modul_uzyskany=tablica_obiektow_strony_dany_modul; if(not tekst_rozwiniety_calego_artykulu)then return;end; local __self=szablonowe_modul:TablicaTransportuSzablonowe(); --if((__self)and(tablica_obiektow_strony_dany_modul)and(not czy_niezakodowana))then --if(not __self.tablica_obiektow_strony_dany_modul)then __self.tablica_obiektow_strony_dany_modul={};end; --__self.tablica_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca]=tablica_obiektow_strony_dany_modul; --end; tekst_rozwiniety_calego_artykulu=tekst_rozwiniety_calego_artykulu and szablonowe_modul[czy_niezakodowana and "RozwijanieNiezakodowanegoSzablonu" or "RozwijanieZakodowanegoSzablonu"](__self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony, stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) local __metatabelka=getmetatable(tabela_parametrow_szablonu); if(__metatabelka)then local PobierzCzyJestPustaTabelka=__metatabelka.PobierzCzyJestPustaTabelka; if(PobierzCzyJestPustaTabelka)then return PobierzCzyJestPustaTabelka(); end; return false; else local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tabela_parametrow_szablonu); if(czy_nie_brak_parametrow)then return true;end; end; end, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](pelna_nazwa_szablonu); if(nazwa_artykulu=="")then return true; end; local strona=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu); if(strona)then if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona); if(nazwa_artykulu=="")then return true; end; end; end, __FUNKCJA, __FUNKCJA2, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,false) or nil; end,__FUNKCJA_PARAMETRY) or nil; return tekst_rozwiniety_calego_artykulu; end, function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) return nil; end,function(nazwa_modulu,nazwa_modulu_szablonowa) return tablica_parametrow_szablonu_strony; end,stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,true) or nil; end,__FUNKCJA_PARAMETRY); ---- return tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_dany_modul_uzyskany,tablica_parametrow_szablonu_strony; end; function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY) local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^[_%s]*$"); local uchwyt_strony; local tekst_artykulu; local nazwa_strony_bez_kodow_html; local parametry_modul=require("Module:Parametry"); if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then --- local html_modul=require("Module:Html"); nazwa_strony_bez_kodow_html=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](nazwa_strony); local szablonowe_modul=require("Module:Szablonowe"); local pudelko_modul=require("Module:Pudełko"); local czy_nazwa_niepoprawna=pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_strony_bez_kodow_html); if(czy_nazwa_niepoprawna)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony niepoprawna"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony niepoprawna"); end; end; mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego zawartości: "..nazwa_strony.."."); return nil; end; --- local nazwa_strony_z_kodami_html=html_modul["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"](nazwa_strony); local czy_istnieje; local techniczne_modul=require("Module:Techniczne"); uchwyt_strony,tekst_artykulu,czy_istnieje = techniczne_modul.CzyStronaIstniejeJejParametry(nazwa_strony_z_kodami_html,true); if(not uchwyt_strony)then mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego uchwytu: "..(parametry_modul["CzyTakCiąg"](nazwa_modulu) and nazwa_modulu or "(nazwa pusta)").."."); if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"); end; end; return nil; end; if(not czy_istnieje)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"strona nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"strona nie istnieje"); end; end; return nil; else local czy_nie_istnieje_zawartosc=((uchwyt_strony)and(not tekst_artykulu)); if(czy_nie_istnieje_zawartosc)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"zawartość strony nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"zawartość strony nie istnieje"); end; end; return nil; end; end; else if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"); end; end; return nil; end; if(not czy_szablon)then if(czy_noinclude)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1"); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); else tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->.-<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->(.-)<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","%1"); end; tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>(.-)</[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>",""); ----- tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]%s->",""); elseif(parametry_modul.TypeFunction(czy_szablon))then tekst_artykulu=czy_szablon(tekst_artykulu,czy_noinclude); end; ---- --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"\n[^%S\n]*<!%-%-(.-)%-%->[^%S\n]*\n","\n"); local techniczne_modul=require("Module:Techniczne"); tekst_artykulu=__FUNKCJA_KOMENTARZE and (__FUNKCJA_KOMENTARZE(tekst_artykulu)) or techniczne_modul.UsuwanieKomentarzowe(tekst_artykulu); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); local tabela_nazw={}; if(szablony_magiczne)then local nazwy_modul=require("Module:Nazwy"); szablony_magiczne["{{ROOTPAGENAME}}"]=szablony_magiczne["{{ROOTPAGENAME}}"] or nazwy_modul["NAZWAKORZENIASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{NAMESPACE}}"]=szablony_magiczne["{{NAMESPACE}}"] or nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{PAGENAME}}"]=szablony_magiczne["{{PAGENAME}}"] or nazwy_modul["NAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{FULLPAGENAME}}"]=szablony_magiczne["{{FULLPAGENAME}}"] or nazwy_modul["PEŁNANAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{SUBPAGENAME}}"]=szablony_magiczne["{{SUBPAGENAME}}"] or nazwy_modul["NAZWASUBSTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); end; if(szablony_magiczne)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne); local ramka_modul=require("Module:Ramka"); tekst_artykulu=ramka_modul.InstrukcjeWarunkowe(tekst_artykulu); end; ---- tekst_artykulu=__FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) or tekst_artykulu; tekst_artykulu=__FUNKCJA_KONTROLNE and __FUNKCJA_KONTROLNE(tekst_artykulu) or tekst_artykulu; ---- if(not szablon_nie_opis)then if(not dokumentacja)then local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu,nazwa_strony2 or nazwa_strony,nil,nil,nil,nil,nil,nil,nil,nil,nil,__FUNKCJA_PARAMETRY); end; end; return tekst_artykulu; end; return p; 4ns4huj489oj2qu70iucdhl6hu6k9c0 558271 558270 2026-10-02T11:16:22Z Persino 2851 558271 Scribunto text/plain local p={} function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu); if(nazwy_np_modul.Module==nazwa_przestrzeni)then local techniczne_modul=require("Module:Techniczne"); local nazwa_modulu_opisu=techniczne_modul["PełnaNazwaOpisuModułu"](nazwa_modulu); if(nazwa_modulu_opisu~=nazwa_modulu)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; else local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; end; elseif(nazwy_np_modul.Template~=nazwa_przestrzeni)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; elseif(nazwy_np_modul.Template==nazwa_przestrzeni)then if(mw.ustring.match(nazwa_modulu,"^[^:]+:(.*/opis)%s*$"))then local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; local szablonowe_modul=require("Module:Szablonowe"); local ramka_modul=require("Module:Ramka"); local tablica_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then local nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["NazwaSzablonuWywołania"](szablon); if(szablonowe_modul.CzyModyfikatoryInstrukcjiWarunkowychSzablonowych(tabela_modyfikatorow))then return ramka_modul.InstrukcjeWarunkowe(szablon); end; end; end); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; else local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,inkludowana and true or dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; if(inkludowana)then tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst_artykulu_caly; return tekst_artykulu_caly; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local ramka_modul=require("Module:Ramka"); local tablica_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); local opis=nazwa_modulu.."/opis"; local przekierowanie_opis=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_istniejacych_zbiorow,tabela_uchwytow_stron=techniczne_modul.PoliczZbiory{[1]=opis,tekst=true,}; if(liczba_istniejacych_zbiorow>0)then przekierowanie_opis=techniczne_modul.PrzekierowanieDoStrony(opis); else opis=nil; end; ---- local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu,nazwa_modulu_szablonowa) or nil; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu_szablonowa,function(tablica_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- if(stronicowyparser_obiekty_modul.szablony_dokumentacji[nazwa_szablonu])then local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tablica_parametrow_szablonu); if(not czy_nie_brak_parametrow)then local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; else local nazwa_strony_opisu=tablica_parametrow_szablonu[1]; local zawartosc=tablica_parametrow_szablonu["zawartość"]; ---- local czy_nazwa_strony_opisu=parametry_modul.CzyTak(nazwa_strony_opisu); local czy_zawartosc=parametry_modul.CzyTak(zawartosc); if((czy_nazwa_strony_opisu)and(not czy_zawartosc))then local opis_tak=((opis) and (nazwa_strony_opisu==opis)); local nazwa_strony_opisu_czy_przekierowanie=opis_tak and (przekierowanie_opis or nazwa_strony_opisu) or (techniczne_modul.PrzekierowanieDoStrony (nazwa_strony_opisu) or nazwa_strony_opisu); if((opis)and((opis_tak)or((przekierowanie_opis)and(nazwa_strony_opisu==przekierowanie_opis))))then opis=nil;end; ---- local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony_opisu_czy_przekierowanie,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; elseif(czy_zawartosc)then return zawartosc; else local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; end; end; else if(opis)then local pelna_nazwa_szablonu=szablonowe_modul["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu); if((opis==pelna_nazwa_szablonu)or((przekierowanie_opis)and(przekierowanie_opis==pelna_nazwa_szablonu)))then opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or pelna_nazwa_szablonu,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; end; end; end; end,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ramka_modul.InstrukcjeWarunkowe(szablon); end,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end, function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end); end; end,nil,nil,nil,function(tekst_artykulu,nazwa_modulu,tablica_obiektow_strony_dany_modul) if((not inkludowana)and(opis))then local szablony_magiczne={}; opis=przekierowanie_opis or opis; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,opis,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA); return tekst_artykulu_opisu; end; end,nil,nil,nil,__FUNKCJA_PARAMETRY); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; end; end; end; function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local tablica_obiektow_strony_dany_modul_uzyskany=nil; local tablica_parametrow_szablonu_strony={}; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:techniczne"); local nazwy_modul=require("Module:Nazwy"); local parametry_modul=require("Module:Parametry"); local tekst_rozwiniety_calego_artykulu=p.SpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,true,inkludowana, function(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_niezakodowana) tablica_obiektow_strony_dany_modul=tablica_obiektow_strony_dany_modul or {}; tablica_obiektow_strony_dany_modul_uzyskany=tablica_obiektow_strony_dany_modul; if(not tekst_rozwiniety_calego_artykulu)then return;end; local __self=szablonowe_modul:TablicaTransportuSzablonowe(); --if((__self)and(tablica_obiektow_strony_dany_modul)and(not czy_niezakodowana))then --if(not __self.tablica_obiektow_strony_dany_modul)then __self.tablica_obiektow_strony_dany_modul={};end; --__self.tablica_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca]=tablica_obiektow_strony_dany_modul; --end; tekst_rozwiniety_calego_artykulu=tekst_rozwiniety_calego_artykulu and szablonowe_modul[czy_niezakodowana and "RozwijanieNiezakodowanegoSzablonu" or "RozwijanieZakodowanegoSzablonu"](__self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony, stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) local __metatabelka=getmetatable(tabela_parametrow_szablonu); if(__metatabelka)then local PobierzCzyJestPustaTabelka=__metatabelka.PobierzCzyJestPustaTabelka; if(PobierzCzyJestPustaTabelka)then return PobierzCzyJestPustaTabelka(); end; return false; else local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tabela_parametrow_szablonu); if(czy_nie_brak_parametrow)then return true;end; end; end, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](pelna_nazwa_szablonu); if(nazwa_artykulu=="")then return true; end; local strona=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu); if(strona)then if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona); if(nazwa_artykulu=="")then return true; end; end; end, __FUNKCJA, __FUNKCJA2, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,false) or nil; end,__FUNKCJA_PARAMETRY) or nil; return tekst_rozwiniety_calego_artykulu; end, function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) return nil; end,function(nazwa_modulu,nazwa_modulu_szablonowa) return tablica_parametrow_szablonu_strony; end,stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,true) or nil; end,__FUNKCJA_PARAMETRY); ---- return tekst_rozwiniety_calego_artykulu,tablica_obiektow_strony_dany_modul_uzyskany,tablica_parametrow_szablonu_strony; end; function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY) local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^[_%s]*$"); local uchwyt_strony; local tekst_artykulu; local nazwa_strony_bez_kodow_html; local parametry_modul=require("Module:Parametry"); if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then --- local html_modul=require("Module:Html"); nazwa_strony_bez_kodow_html=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](nazwa_strony); local szablonowe_modul=require("Module:Szablonowe"); local pudelko_modul=require("Module:Pudełko"); local czy_nazwa_niepoprawna=pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_strony_bez_kodow_html); if(czy_nazwa_niepoprawna)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony niepoprawna"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony niepoprawna"); end; end; mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego zawartości: "..nazwa_strony.."."); return nil; end; --- local nazwa_strony_z_kodami_html=html_modul["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"](nazwa_strony); local czy_istnieje; local techniczne_modul=require("Module:Techniczne"); uchwyt_strony,tekst_artykulu,czy_istnieje = techniczne_modul.CzyStronaIstniejeJejParametry(nazwa_strony_z_kodami_html,true); if(not uchwyt_strony)then mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego uchwytu: "..(parametry_modul["CzyTakCiąg"](nazwa_modulu) and nazwa_modulu or "(nazwa pusta)").."."); if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"); end; end; return nil; end; if(not czy_istnieje)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"strona nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"strona nie istnieje"); end; end; return nil; else local czy_nie_istnieje_zawartosc=((uchwyt_strony)and(not tekst_artykulu)); if(czy_nie_istnieje_zawartosc)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"zawartość strony nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"zawartość strony nie istnieje"); end; end; return nil; end; end; else if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"); end; end; return nil; end; if(not czy_szablon)then if(czy_noinclude)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1"); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); else tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->.-<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->(.-)<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","%1"); end; tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>(.-)</[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>",""); ----- tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]%s->",""); elseif(parametry_modul.TypeFunction(czy_szablon))then tekst_artykulu=czy_szablon(tekst_artykulu,czy_noinclude); end; ---- --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"\n[^%S\n]*<!%-%-(.-)%-%->[^%S\n]*\n","\n"); local techniczne_modul=require("Module:Techniczne"); tekst_artykulu=__FUNKCJA_KOMENTARZE and (__FUNKCJA_KOMENTARZE(tekst_artykulu)) or techniczne_modul.UsuwanieKomentarzowe(tekst_artykulu); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); local tabela_nazw={}; if(szablony_magiczne)then local nazwy_modul=require("Module:Nazwy"); szablony_magiczne["{{ROOTPAGENAME}}"]=szablony_magiczne["{{ROOTPAGENAME}}"] or nazwy_modul["NAZWAKORZENIASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{NAMESPACE}}"]=szablony_magiczne["{{NAMESPACE}}"] or nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{PAGENAME}}"]=szablony_magiczne["{{PAGENAME}}"] or nazwy_modul["NAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{FULLPAGENAME}}"]=szablony_magiczne["{{FULLPAGENAME}}"] or nazwy_modul["PEŁNANAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{SUBPAGENAME}}"]=szablony_magiczne["{{SUBPAGENAME}}"] or nazwy_modul["NAZWASUBSTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); end; if(szablony_magiczne)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne); local ramka_modul=require("Module:Ramka"); tekst_artykulu=ramka_modul.InstrukcjeWarunkowe(tekst_artykulu); end; ---- tekst_artykulu=__FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) or tekst_artykulu; tekst_artykulu=__FUNKCJA_KONTROLNE and __FUNKCJA_KONTROLNE(tekst_artykulu) or tekst_artykulu; ---- if(not szablon_nie_opis)then if(not dokumentacja)then local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu,nazwa_strony2 or nazwa_strony,nil,nil,nil,nil,nil,nil,nil,nil,nil,__FUNKCJA_PARAMETRY); end; end; return tekst_artykulu; end; return p; gz10tdb1haernsuhmwhedg42ss3e8jq 558278 558271 2026-10-02T11:44:14Z Persino 2851 558278 Scribunto text/plain local p={} function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local nazwy_np_modul=mw.loadData("Module:Nazwy/Np"); local nazwy_modul=require("Module:Nazwy"); local nazwa_przestrzeni=nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu); if(nazwy_np_modul.Module==nazwa_przestrzeni)then local techniczne_modul=require("Module:Techniczne"); local nazwa_modulu_opisu=techniczne_modul["PełnaNazwaOpisuModułu"](nazwa_modulu); if(nazwa_modulu_opisu~=nazwa_modulu)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; else local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; end; elseif(nazwy_np_modul.Template~=nazwa_przestrzeni)then local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); tekst=__FUNKCJA and __FUNKCJA(tekst,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst; return tekst; elseif(nazwy_np_modul.Template==nazwa_przestrzeni)then if(mw.ustring.match(nazwa_modulu,"^[^:]+:(.*/opis)%s*$"))then local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; local szablonowe_modul=require("Module:Szablonowe"); local ramka_modul=require("Module:Ramka"); local tablica_analizy_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then local nazwa_szablonu,tabela_modyfikatorow=szablonowe_modul["NazwaSzablonuWywołania"](szablon); if(szablonowe_modul.CzyModyfikatoryInstrukcjiWarunkowychSzablonowych(tabela_modyfikatorow))then return ramka_modul.InstrukcjeWarunkowe(szablon); end; end; end); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; else local szablony_magiczne={}; local tekst_artykulu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu,nil,not inkludowana,szablony_magiczne,inkludowana and true or dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); if(not tekst_artykulu_caly)then return;end; if(inkludowana)then tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,nil,dokumentacja,true) or tekst_artykulu_caly; return tekst_artykulu_caly; end; local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local ramka_modul=require("Module:Ramka"); local tablica_analizy_obiektow_strony_dany_modul=((dokumentacja)and {} or nil); local opis=nazwa_modulu.."/opis"; local przekierowanie_opis=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_istniejacych_zbiorow,tabela_uchwytow_stron=techniczne_modul.PoliczZbiory{[1]=opis,tekst=true,}; if(liczba_istniejacych_zbiorow>0)then przekierowanie_opis=techniczne_modul.PrzekierowanieDoStrony(opis); else opis=nil; end; ---- local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu,nazwa_modulu_szablonowa) or nil; ---- local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu_caly=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,nil,function(szablon,obiekt,kod) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,nazwa_modulu_szablonowa,function(tablica_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) ---- if(stronicowyparser_obiekty_modul.szablony_dokumentacji[nazwa_szablonu])then local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tablica_parametrow_szablonu); if(not czy_nie_brak_parametrow)then local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; else local nazwa_strony_opisu=tablica_parametrow_szablonu[1]; local zawartosc=tablica_parametrow_szablonu["zawartość"]; ---- local czy_nazwa_strony_opisu=parametry_modul.CzyTak(nazwa_strony_opisu); local czy_zawartosc=parametry_modul.CzyTak(zawartosc); if((czy_nazwa_strony_opisu)and(not czy_zawartosc))then local opis_tak=((opis) and (nazwa_strony_opisu==opis)); local nazwa_strony_opisu_czy_przekierowanie=opis_tak and (przekierowanie_opis or nazwa_strony_opisu) or (techniczne_modul.PrzekierowanieDoStrony (nazwa_strony_opisu) or nazwa_strony_opisu); if((opis)and((opis_tak)or((przekierowanie_opis)and(nazwa_strony_opisu==przekierowanie_opis))))then opis=nil;end; ---- local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony_opisu_czy_przekierowanie,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; elseif(czy_zawartosc)then return zawartosc; else local nazwa_strony_opisu=nazwa_modulu.."/opis"; opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu_caly=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or nazwa_strony_opisu,nil,false,szablony_magiczne,true,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu_caly; end; end; else if(opis)then local pelna_nazwa_szablonu=szablonowe_modul["PełnaNazwaStronyNazwySzablonu"](nazwa_szablonu); if((opis==pelna_nazwa_szablonu)or((przekierowanie_opis)and(przekierowanie_opis==pelna_nazwa_szablonu)))then opis=nil; local szablony_magiczne={}; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,przekierowanie_opis or pelna_nazwa_szablonu,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); return tekst_artykulu_opisu; end; end; end; end,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ramka_modul.InstrukcjeWarunkowe(szablon); end,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); end; end, function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end); end; end,nil,nil,nil,function(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) if((not inkludowana)and(opis))then local szablony_magiczne={}; opis=przekierowanie_opis or opis; local tekst_artykulu_opisu=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,opis,nil,false,szablony_magiczne,true,false,nazwa_modulu,nil,__FUNKCJA_ANALIZA_SPISOWA); return tekst_artykulu_opisu; end; end,nil,nil,nil,__FUNKCJA_PARAMETRY); if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,false) or tekst_artykulu_caly; return tekst_artykulu_caly; end; end; end; function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY) local tablica_analizy_obiektow_strony_dany_modul_uzyskany=nil; local tablica_parametrow_szablonu_strony={}; local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:techniczne"); local nazwy_modul=require("Module:Nazwy"); local parametry_modul=require("Module:Parametry"); local tekst_rozwiniety_calego_artykulu=p.SpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,true,inkludowana, function(tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,czy_niezakodowana) tablica_analizy_obiektow_strony_dany_modul=tablica_analizy_obiektow_strony_dany_modul or {}; tablica_analizy_obiektow_strony_dany_modul_uzyskany=tablica_analizy_obiektow_strony_dany_modul; if(not tekst_rozwiniety_calego_artykulu)then return;end; local __self=szablonowe_modul:TablicaTransportuSzablonowe(); --if((__self)and(tablica_analizy_obiektow_strony_dany_modul)and(not czy_niezakodowana))then --if(not __self.tablica_analizy_obiektow_strony_dany_modul)then __self.tablica_analizy_obiektow_strony_dany_modul={};end; --__self.tablica_analizy_obiektow_strony_dany_modul[nazwa_modulu_aktualna_czy_biezaca]=tablica_analizy_obiektow_strony_dany_modul; --end; tekst_rozwiniety_calego_artykulu=tekst_rozwiniety_calego_artykulu and szablonowe_modul[czy_niezakodowana and "RozwijanieNiezakodowanegoSzablonu" or "RozwijanieZakodowanegoSzablonu"](__self,tekst_rozwiniety_calego_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_parametrow_szablonu_strony, stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) local __metatabelka=getmetatable(tabela_parametrow_szablonu); if(__metatabelka)then local PobierzCzyJestPustaTabelka=__metatabelka.PobierzCzyJestPustaTabelka; if(PobierzCzyJestPustaTabelka)then return PobierzCzyJestPustaTabelka(); end; return false; else local czy_nie_brak_parametrow=parametry_modul["CzySąElementyTablicy"](tabela_parametrow_szablonu); if(czy_nie_brak_parametrow)then return true;end; end; end, function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](pelna_nazwa_szablonu); if(nazwa_artykulu=="")then return true; end; local strona=techniczne_modul.PrzekierowanieDoStrony(pelna_nazwa_szablonu); if(strona)then if(not mw.ustring.match(pelna_nazwa_szablonu,"/"))then return true;end; local nazwa_artykulu=nazwy_modul["NAZWAARTYKUŁUKSIĄŻKI"](strona); if(nazwa_artykulu=="")then return true; end; end; end, __FUNKCJA, __FUNKCJA2, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,false) or nil; end,__FUNKCJA_PARAMETRY) or nil; return tekst_rozwiniety_calego_artykulu; end, function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul) return nil; end,function(nazwa_modulu,nazwa_modulu_szablonowa) return tablica_parametrow_szablonu_strony; end,stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu, stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu, function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return __FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw,true) or nil; end,__FUNKCJA_PARAMETRY); ---- return tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul_uzyskany,tablica_parametrow_szablonu_strony; end; function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY) local czy_nazwa_strony_z_tylko_odstepami_lub_pusta=mw.ustring.match(nazwa_strony,"^[_%s]*$"); local uchwyt_strony; local tekst_artykulu; local nazwa_strony_bez_kodow_html; local parametry_modul=require("Module:Parametry"); if(not czy_nazwa_strony_z_tylko_odstepami_lub_pusta)then --- local html_modul=require("Module:Html"); nazwa_strony_bez_kodow_html=html_modul["TransformacjaKoduHtmlDoZnakuCiągu"](nazwa_strony); local szablonowe_modul=require("Module:Szablonowe"); local pudelko_modul=require("Module:Pudełko"); local czy_nazwa_niepoprawna=pudelko_modul["CzyNiepoprawnaNazwa"](nazwa_strony_bez_kodow_html); if(czy_nazwa_niepoprawna)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony niepoprawna"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony niepoprawna"); end; end; mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego zawartości: "..nazwa_strony.."."); return nil; end; --- local nazwa_strony_z_kodami_html=html_modul["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"](nazwa_strony); local czy_istnieje; local techniczne_modul=require("Module:Techniczne"); uchwyt_strony,tekst_artykulu,czy_istnieje = techniczne_modul.CzyStronaIstniejeJejParametry(nazwa_strony_z_kodami_html,true); if(not uchwyt_strony)then mw.log("Nieprawidłowy format nazwy modułu przy uzyskiwaniu jego uchwytu: "..(parametry_modul["CzyTakCiąg"](nazwa_modulu) and nazwa_modulu or "(nazwa pusta)").."."); if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nieprawidłowy uchwyt strony"); end; end; return nil; end; if(not czy_istnieje)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"strona nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"strona nie istnieje"); end; end; return nil; else local czy_nie_istnieje_zawartosc=((uchwyt_strony)and(not tekst_artykulu)); if(czy_nie_istnieje_zawartosc)then if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"zawartość strony nie istnieje"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"zawartość strony nie istnieje"); end; end; return nil; end; end; else if(self and self.tabela_listy_danych_analizy_ksiazki)then local stronicowyparser_problemy_modul=require("Module:StronicowyParser/Problemy"); if(not stronicowyparser_problemy_modul.CzyJestTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"))then stronicowyparser_problemy_modul.UstawTakiProblemowyElement(self,"nazwa strony składa się tylko ze znaków odstępu"); end; end; return nil; end; if(not czy_szablon)then if(czy_noinclude)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->(.-)<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->","%1"); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->.-<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); else tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->.-<%s-/%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->(.-)<%s-/%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->","%1"); end; tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>(.-)</[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]>",""); ----- tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Ii][Nn][Cc][Ll][Uu][Dd][Ee][Oo][Nn][Ll][Yy]%s->",""); tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"</?%s-[Tt][Ee][Mm][Pp][Ll][Aa][Tt][Ee][Dd][Aa][Tt][Aa]%s->",""); elseif(parametry_modul.TypeFunction(czy_szablon))then tekst_artykulu=czy_szablon(tekst_artykulu,czy_noinclude); end; ---- --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"\n[^%S\n]*<!%-%-(.-)%-%->[^%S\n]*\n","\n"); local techniczne_modul=require("Module:Techniczne"); tekst_artykulu=__FUNKCJA_KOMENTARZE and (__FUNKCJA_KOMENTARZE(tekst_artykulu)) or techniczne_modul.UsuwanieKomentarzowe(tekst_artykulu); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->.-<%s-/%s-[Nn][Oo][Ww][Ii][Kk][Ii]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<%s-[Pp][Rr][Ee]%s->.-<%s-/%s-[Pp][Rr][Ee]%s->",""); --tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(<%s-[mM][aA][tT][hH]%s->.-<%s-/%s-[mM][aA][tT][hH]%s->)",""); local tabela_nazw={}; if(szablony_magiczne)then local nazwy_modul=require("Module:Nazwy"); szablony_magiczne["{{ROOTPAGENAME}}"]=szablony_magiczne["{{ROOTPAGENAME}}"] or nazwy_modul["NAZWAKORZENIASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{NAMESPACE}}"]=szablony_magiczne["{{NAMESPACE}}"] or nazwy_modul["NAZWAPRZESTRZENI"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{PAGENAME}}"]=szablony_magiczne["{{PAGENAME}}"] or nazwy_modul["NAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{FULLPAGENAME}}"]=szablony_magiczne["{{FULLPAGENAME}}"] or nazwy_modul["PEŁNANAZWASTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); szablony_magiczne["{{SUBPAGENAME}}"]=szablony_magiczne["{{SUBPAGENAME}}"] or nazwy_modul["NAZWASUBSTRONY"](nazwa_modulu_szablonu_opisu or nazwa_strony_bez_kodow_html,tabela_nazw); end; if(szablony_magiczne)then tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"{{[^{}]+}}",szablony_magiczne); local ramka_modul=require("Module:Ramka"); tekst_artykulu=ramka_modul.InstrukcjeWarunkowe(tekst_artykulu); end; ---- tekst_artykulu=__FUNKCJA_ANALIZA_SPISOWA and __FUNKCJA_ANALIZA_SPISOWA(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) or tekst_artykulu; tekst_artykulu=__FUNKCJA_KONTROLNE and __FUNKCJA_KONTROLNE(tekst_artykulu) or tekst_artykulu; ---- if(not szablon_nie_opis)then if(not dokumentacja)then local szablonowe_modul=require("Module:Szablonowe"); tekst_artykulu=szablonowe_modul:KodowanieSzablonowegoTekstuZObiektamiWikikodu(tekst_artykulu,nazwa_strony2 or nazwa_strony,nil,nil,nil,nil,nil,nil,nil,nil,nil,__FUNKCJA_PARAMETRY); end; end; return tekst_artykulu; end; return p; k7cb3jda29sxrj443bsdwecdul0427k Moduł:Szeregi 828 63011 558188 558125 2026-10-01T12:55:08Z Persino 2851 558188 Scribunto text/plain local p={}; p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor) local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); if((not numer_a)or(not numer_b))then return nil;end; local tak;local ile; if(funkcja_wzor)then tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); else tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); end; if(tak)then numer=numer_a+(ile or 1); return p.WyszukiwanieNaPodstawieWzorca(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor); end; return numer_a,numer_b,a,b,c,d,e,f,g,h,i; end; p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik) local wynik={}; local numer_begin=0; local czy=true; local __wzor; local ile_wyszukan=0; local licznik_wzor=nil; while(true)do numer_begin=numer_begin+1; if((funkcja_wzor)and(czy))then licznik_wzor=licznik_wzor or 1; __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); __wzor=__wzor or wzor; elseif(czy)then __wzor=wzor; czy=false; end; local numer_a,numer_b,a,b,c,d,e,f,g,h,i=p.WyszukiwanieNaPodstawieWzorca(szereg,__wzor,numer_begin,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor); if((numer_a)and(numer_b)and(numer_a<=numer_b)and(numer_a>=numer_begin))then if(numer_a>1)then table.insert(wynik,mw.ustring.sub(szereg,numer_begin,numer_a-1)); end; local ciag; if(funkcja_wzor)then ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); else ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i);end; if(ciag)then table.insert(wynik,ciag); else table.insert(wynik,mw.ustring.sub(szereg,numer_a,numer_b)); end; numer_begin=numer_b; ile_wyszukan=ile_wyszukan+1; else if(funkcja_wzor)then if(not czy)then break; else numer_begin=numer_begin-1; if(funkcja_licznik)then licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); else licznik_wzor=licznik_wzor+1; end; end; else break; end; end; end; local dlugosc=mw.ustring.len(szereg); if((dlugosc>0)and(dlugosc>=numer_begin))then table.insert(wynik,mw.ustring.sub(szereg,math.max(numer_begin,1),math.max(dlugosc,1))); end; return table.concat(wynik,""),ile_wyszukan; end; function p.IteratorLiniiTekstu(tekst) local poczatek=true; local zakonczone=false; local iterator=nil; ---- return function() if(not zakonczone)then if(poczatek)then local str=mw.ustring.match(tekst,"^([^\n]*)"); poczatek=false; return str; else iterator=iterator or mw.ustring.gmatch(tekst,"\n([^\n]*)"); local wartosc=iterator(); if(not wartosc)then zakonczone=true;end; return wartosc; end; else return nil; end; end; end; function p.ZamianaZnakowaLinii(szereg,funkcja) local tab_tekst={}; local iter_main=p.IteratorLiniiTekstu(szereg); for linia in iter_main do linia=funkcja(linia) or linia; table.insert(tab_tekst,linia); end; return table.concat(tab_tekst,"\n"); end; function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2) if(not normalnie)then tekst=funkcja and funkcja(tekst) or tekst; return tekst; end; local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local ile1;local pozycja1;local pozycja2=0; local tab_str={}; local pozycja_temp; wzor="(.-)"..wzor; while(true)do local ciag;local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8; pozycja1,pozycja2,ciag,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); if((pozycja1)and(pozycja2))then if((pozycja1<=pozycja2))then pozycja_temp=pozycja2; ciag=funkcja and funkcja(ciag) or ciag; ciag=ciag..(funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8) or kod_1 or ""); table.insert(tab_str,ciag); else break; end; else break; end; end; pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; local str=table.concat(tab_str,""); return str; end; return p; b2vcwe2ygf3e9x19qzw5nooldnt6mj3 558193 558188 2026-10-01T13:47:19Z Persino 2851 558193 Scribunto text/plain local p={}; p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor) local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); if((not numer_a)or(not numer_b))then return nil;end; local tak;local ile; if(funkcja_wzor)then tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); else tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); end; if(tak)then numer=numer_a+(ile or 1); return p.WyszukiwanieNaPodstawieWzorca(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor); end; return numer_a,numer_b,a,b,c,d,e,f,g,h,i; end; p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik) local wynik={}; local numer_begin=0; local czy=true; local __wzor; local ile_wyszukan=0; local licznik_wzor=nil; while(true)do numer_begin=numer_begin+1; if((funkcja_wzor)and(czy))then licznik_wzor=licznik_wzor or 1; __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); __wzor=__wzor or wzor; elseif(czy)then __wzor=wzor; czy=false; end; local numer_a,numer_b,a,b,c,d,e,f,g,h,i=p.WyszukiwanieNaPodstawieWzorca(szereg,__wzor,numer_begin,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor); if((numer_a)and(numer_b)and(numer_a<=numer_b)and(numer_a>=numer_begin))then if(numer_a>1)then table.insert(wynik,mw.ustring.sub(szereg,numer_begin,numer_a-1)); end; local ciag; if(funkcja_wzor)then ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); else ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i);end; if(ciag)then table.insert(wynik,ciag); else table.insert(wynik,mw.ustring.sub(szereg,numer_a,numer_b)); end; numer_begin=numer_b; ile_wyszukan=ile_wyszukan+1; else if(funkcja_wzor)then if(not czy)then break; else numer_begin=numer_begin-1; if(funkcja_licznik)then licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); else licznik_wzor=licznik_wzor+1; end; end; else break; end; end; end; local dlugosc=mw.ustring.len(szereg); if((dlugosc>0)and(dlugosc>=numer_begin))then table.insert(wynik,mw.ustring.sub(szereg,math.max(numer_begin,1),math.max(dlugosc,1))); end; return table.concat(wynik,""),ile_wyszukan; end; function p.IteratorLiniiTekstu(tekst) local poczatek=true; local zakonczone=false; local iterator=nil; ---- return function() if(not zakonczone)then if(poczatek)then local str=mw.ustring.match(tekst,"^([^\n]*)"); poczatek=false; return str; else iterator=iterator or mw.ustring.gmatch(tekst,"\n([^\n]*)"); local wartosc=iterator(); if(not wartosc)then zakonczone=true;end; return wartosc; end; else return nil; end; end; end; function p.ZamianaZnakowaLinii(szereg,funkcja) local tab_tekst={}; local iter_main=p.IteratorLiniiTekstu(szereg); for linia in iter_main do linia=funkcja(linia) or linia; table.insert(tab_tekst,linia); end; return table.concat(tab_tekst,"\n"); end; function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2) if(not normalnie)then tekst=funkcja and funkcja(tekst) or tekst; return tekst; end; local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local ile1;local pozycja1;local pozycja2=0; local tab_str={}; local pozycja_temp; local pozycja_poczatek=1; while(true)do local ciag;local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); if((pozycja1)and(pozycja2))then if((pozycja1<=pozycja2))then pozycja_temp=pozycja2; ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; ciag=funkcja and funkcja(ciag) or ciag; ciag=ciag..(funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""); table.insert(tab_str,ciag); else break; end; else break; end; end; pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; local str=table.concat(tab_str,""); return str; end; return p; axma5shwb9yzyxd2gm6xsb5g4iv8dsz 558194 558193 2026-10-01T13:53:44Z Persino 2851 558194 Scribunto text/plain local p={}; p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor) local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); if((not numer_a)or(not numer_b))then return nil;end; local tak;local ile; if(funkcja_wzor)then tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); else tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); end; if(tak)then numer=numer_a+(ile or 1); return p.WyszukiwanieNaPodstawieWzorca(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor); end; return numer_a,numer_b,a,b,c,d,e,f,g,h,i; end; p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik) local wynik={}; local numer_begin=0; local czy=true; local __wzor; local ile_wyszukan=0; local licznik_wzor=nil; while(true)do numer_begin=numer_begin+1; if((funkcja_wzor)and(czy))then licznik_wzor=licznik_wzor or 1; __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); __wzor=__wzor or wzor; elseif(czy)then __wzor=wzor; czy=false; end; local numer_a,numer_b,a,b,c,d,e,f,g,h,i=p.WyszukiwanieNaPodstawieWzorca(szereg,__wzor,numer_begin,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor); if((numer_a)and(numer_b)and(numer_a<=numer_b)and(numer_a>=numer_begin))then if(numer_a>1)then table.insert(wynik,mw.ustring.sub(szereg,numer_begin,numer_a-1)); end; local ciag; if(funkcja_wzor)then ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); else ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i);end; if(ciag)then table.insert(wynik,ciag); else table.insert(wynik,mw.ustring.sub(szereg,numer_a,numer_b)); end; numer_begin=numer_b; ile_wyszukan=ile_wyszukan+1; else if(funkcja_wzor)then if(not czy)then break; else numer_begin=numer_begin-1; if(funkcja_licznik)then licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); else licznik_wzor=licznik_wzor+1; end; end; else break; end; end; end; local dlugosc=mw.ustring.len(szereg); if((dlugosc>0)and(dlugosc>=numer_begin))then table.insert(wynik,mw.ustring.sub(szereg,math.max(numer_begin,1),math.max(dlugosc,1))); end; return table.concat(wynik,""),ile_wyszukan; end; function p.IteratorLiniiTekstu(tekst) local poczatek=true; local zakonczone=false; local iterator=nil; ---- return function() if(not zakonczone)then if(poczatek)then local str=mw.ustring.match(tekst,"^([^\n]*)"); poczatek=false; return str; else iterator=iterator or mw.ustring.gmatch(tekst,"\n([^\n]*)"); local wartosc=iterator(); if(not wartosc)then zakonczone=true;end; return wartosc; end; else return nil; end; end; end; function p.ZamianaZnakowaLinii(szereg,funkcja) local tab_tekst={}; local iter_main=p.IteratorLiniiTekstu(szereg); for linia in iter_main do linia=funkcja(linia) or linia; table.insert(tab_tekst,linia); end; return table.concat(tab_tekst,"\n"); end; function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2) if(not normalnie)then tekst=funkcja and funkcja(tekst) or tekst; return tekst; end; local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local ile1;local pozycja1;local pozycja2=0; local tab_str={}; local pozycja_temp; local pozycja_poczatek=1; while(true)do local ciag;local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); if((pozycja1)and(pozycja2))then if((pozycja1<=pozycja2))then pozycja_temp=pozycja2; ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); else break; end; else break; end; end; pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; local str=table.concat(tab_str,""); return str; end; return p; 1askdxui3hvnim2y3f67ldzgr3k87n4 Wikibooks:Moduły/Szeregi 4 63251 558183 558182 2026-10-01T12:10:25Z Persino 2851 558183 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu {{Code|{{ld2|Szeregi}}}} jest użyte w module {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na te stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}} w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. | 5 = {{Code|funkcja2}} | _5 = Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}. }} === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> p78cmohwrr5amyccibt7im13liowqmu 558184 558183 2026-10-01T12:19:58Z Persino 2851 558184 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu {{Code|{{ld2|Szeregi}}}} jest użyte w module {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na te stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}} w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. | 5 = {{Code|funkcja2}} | _5 = Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}. }} === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4dfcfta7v2e8n1lpgpgm6mb0s91bd78 558185 558184 2026-10-01T12:40:35Z Persino 2851 558185 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na te stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}} w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. | 5 = {{Code|funkcja2}} | _5 = Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}. }} === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jdb8tvh6th198ra67qz9yyq6iwq4pdu 558186 558185 2026-10-01T12:41:08Z Persino 2851 558186 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. | 5 = {{Code|funkcja2}} | _5 = Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}. }} === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qbfmodkd9jlrci9r7mqafgp1f54b1ou 558189 558186 2026-10-01T13:03:15Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558189 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} | _5 = Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 27k0klalvdr5zvwlweqsll5u2u570st 558190 558189 2026-10-01T13:21:59Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558190 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, est odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli: <syntaxhighlight lang="lua"> local ciag;local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8; pozycja1,pozycja2,ciag,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} ---- Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hnme614luo11vromtviitmrtq3d0h4k 558191 558190 2026-10-01T13:30:41Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558191 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, est odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli: <syntaxhighlight lang="lua"> local ciag;local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8; pozycja1,pozycja2,ciag,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> k51q6h35vyamx0ls0ihy9c3m0ey9egp 558192 558191 2026-10-01T13:31:46Z Persino 2851 /* Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej */ 558192 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli: <syntaxhighlight lang="lua"> local ciag;local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8; pozycja1,pozycja2,ciag,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> m27pm4jo1t2qd7h8tljlof1zo1dcsy5 558195 558192 2026-10-01T14:03:19Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558195 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> I element niepomijalny: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany: <syntaxhighlight lang="lua"> table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie wcale przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 8x5bgz2gwns217bhl0goocncvcrrv8m 558196 558195 2026-10-01T14:05:59Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558196 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> I element niepomijalny jest wyznaczany, i wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie wcale przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> n6c1czzsb9fbhve8nhps91b2553fpde 558197 558196 2026-10-01T14:09:53Z Persino 2851 /* Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej */ 558197 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie wcale przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pezjy9ag7xyj1f5yy5t886vvucxiwbm 558198 558197 2026-10-01T14:11:27Z Persino 2851 /* Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej */ 558198 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji wywoływana w pętli elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gl1hmf5dutc55o59h811g3xioz8j7cq 558199 558198 2026-10-01T14:13:17Z Persino 2851 /* Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej */ 558199 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> kzxh9abpirv18lwrwjw9vvfr30jzjge 558200 558199 2026-10-01T14:14:43Z Persino 2851 /* Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej */ 558200 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gfx49z8ezj64xyu89ev1ga98lumnq5a 558201 558200 2026-10-01T14:19:34Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558201 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do ośmiu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g0z81rzv6251a4sa0j3ej8508gj8xn6 558202 558201 2026-10-01T14:21:02Z Persino 2851 /* {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} */ 558202 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w czwartej funkcji argument pierwszy można pominąć, a w pierwszej zmienną trzecią pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 64imb7cxeg1urmflj21wmvy2b6elrsd 558203 558202 2026-10-01T15:33:53Z Persino 2851 /* {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} */ 558203 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według piątej funkcji, dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w pierwszej funkcji argument trzeci można pominąć, a wdrugiej zmienną pierwszą pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1lm372i60wvoosge8j7zif00qrtb6ud 558204 558203 2026-10-01T15:41:20Z Persino 2851 /* {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} */ 558204 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Jest podany przykład, według którego wyszukujemy odpowiednie szablony pod pewnymi warunkami. : Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według wzoru trzeciej funkcji (piąty argument), dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w pierwszej funkcji argument trzeci można pominąć, a wdrugiej zmienną pierwszą pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. Z funkcji tej korzystamy w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, właśnie do kodowania tekstu. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gqfi4lgarpuqhpvkq7jgipxp9f7qk4r 558205 558204 2026-10-01T15:42:13Z Persino 2851 /* {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} */ 558205 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu. Jest podany przykład, według którego wyszukujemy odpowiednie szablony pod pewnymi warunkami: * Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według wzoru trzeciej funkcji (piąty argument), dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w pierwszej funkcji argument trzeci można pominąć, a wdrugiej zmienną pierwszą pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. Z funkcji tej korzystamy w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, właśnie do kodowania tekstu. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0oijzvqm4n2re9jz6l2nl3slf9j6g0o 558206 558205 2026-10-01T15:44:47Z Persino 2851 /* {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} */ 558206 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu spełniający pewne warunki według szeregu wzorów, ale niekoniecznie, może być według tylko jednego, na inną zmodyfikowaną z poprzedniego zawartość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. ; Jest podany przykład, według którego wyszukujemy odpowiednie szablony pod pewnymi warunkami{{dk}} Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według wzoru trzeciej funkcji (piąty argument), dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w pierwszej funkcji argument trzeci można pominąć, a wdrugiej zmienną pierwszą pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. Z funkcji tej korzystamy w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, właśnie do kodowania tekstu. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> frh59hvnswru1bwsz3qnqcza9068jrg 558207 558206 2026-10-01T15:46:06Z Persino 2851 /* {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} */ 558207 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu spełniający pewne warunki według szeregu wzorów, ale niekoniecznie, może być według tylko jednego, na inną zmodyfikowaną z poprzedniego zawartość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. ; Jest podany przykład, według którego wyszukujemy odpowiednie szablony pod pewnymi warunkami{{dk}} Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według wzoru trzeciej funkcji (piąty argument), dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w pierwszej funkcji argument trzeci można pominąć, a wdrugiej zmienną pierwszą pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. Z funkcji tej korzystamy w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, właśnie do kodowania tekstu. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na liniach, by dodać je póżniej do tablicy linia, by je połączyć przy pomocy łącznika {{Code|\n}}. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dpqcrepbmzm77duduiv62wa04cxnzrz 558208 558207 2026-10-01T15:49:16Z Persino 2851 /* {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} */ 558208 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|Szeregi}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Moduł służy do obsługi na ciągach (szeregach) języka {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Moduł wywołuje się za pomocą polecenia: <syntaxhighlight lang="lua"> local szeregi_modul=require("Module:Szeregi"); </syntaxhighlight> Dzięki, któremu można wypisywać funkcje należącego do niego. Funkcje opisane w module, która opisuje ta dokumentacja, służą do operacji na szeregach, też na wydzielaniu poszczególnych linii i robienia na nich operacji, a także wykonywania operacji na niepomijanych elementach znakowych. Przykładowe użycie modułu: {{Code|{{ld2|Szeregi}}}}, jest użyte w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}. Na tej stronie będziemy wchodzili do pliku: {{Code|Moduły/Szeregi}}, w przestrzeni nazw: {{Np|Project|link=tak}}, ściągając jego zawartość w funkcjach: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, {{LinkŚródtytuł|p.ZamianaZnakowaSzeregu}}, {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, i {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}. == {{Śródtytuł|p.WyszukiwanieNaPodstawieWzorca}}{{Code|p.WyszukiwanieNaPodstawieWzorca}} == Funkcja wyszukuje począwszy od miejsca pierwszego (trzeci argument) funkcji, czyli z podwójnymi nawiasami klamrowymi, a jeżeli w nim są początki, np. innych szablonów, to wyszukuje kolejne przykładowe dwa miejsca dalej względem poprzedniego przykładowego wyszukiwania. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.WyszukiwanieNaPodstawieWzorca=function(szereg,wzor,numer,funkcja_sprawdzanie_wyszukania,funkcja_wzor,licznik_wzor)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Jak w: {{LinkPatrz|szereg}}. | 2 = {{Code|wzor}} | _2 = Jak w: {{LinkPatrz|wzor}}. | 3 = {{Code|numer}} | _3 = Numer, od którego ma rozpocząc wyszukiwanie. | 4 = {{Code|funkcja_sprawdzanie_wyszukania}} | _4 = Jak w: {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}. | 5 = {{Code|funkcja_wzor}} | _5 = Jak w: {{LinkPatrz|funkcja_wzor}}. | 6 = {{Code|licznik_wzor}} | _6 = Licznik wykorzystywany w ciele funkcji: {{Code|funkcja_sprawdzanie_wyszukania}}, gdy parametr: {{Code|funkcja_wzor}}, nie jest: {{Code|nil}}, tylko funkcją. }} A {{Code|numer}} w czwartym argumencie (funkcji) ten parametr wskazany jest przez trzeci argument, czyli {{Code|1}}, a jeżeli pierwsze wyszukiwanie się nie powiodło się, ona wyszukuje następne, aż do całkowitego niepowodzenia, lub do nieznalezienia następnych ciągów, wtedy jest zwracana wartość {{Code|nil}}, ale przez tym liczba ponownym wyszukań może być dowolna, w zależności od długości tekstu. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(wzor,licznik_wzor,czy) -- Obojętne jaka definicja, ta funkcja ma definicję, bo w p.ZamianaZnakowaSzeregu jest ona tam potrzebna. end,1); </syntaxhighlight> Opis zmiennych zwracanych w przykładzie: {{OpisParametrów | 1 = {{Code|numer_a}} | _1 = Początek wyszukania. | 2 = {{Code|numer_b}} | _2 = Koniec wyszukania. | 3 = {{Code|zawartosc}} i {{Code|dalej}} | _3 = Zawartość i dalszy element, elementy zwaracane z przechwytywania okazane wzorem {{Code|<nowiki>%{%{(.-)%}%}(%l*)</nowiki>}} za pomocą dwóch części przechwytujących ciągu znakowe. }} Funkcja ta zwraca dwa dalsze parametry, najwięcej dalszych parametrów (od {{Code|zawartość}}) może być dziewięć, taka bowiem jest właściwość funkcji: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); local numer_a,numer_b,a,b,c,d,e,f,g,h,i=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(szereg,wzor,numer,#szereg,false); </syntaxhighlight> Ta funkcja jest w definicji omawianej funkcji. Tę funkcję równie dobrze można napisać prościej: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local numer_a,numer_b,zawartosc,dalej=szeregi_modul.WyszukiwanieNaPodstawieWzorca(tekst,"%{%{(.-)%}%}(%l*)",1, function(tekst,numer,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end ); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaSzeregu}}{{Code|p.ZamianaZnakowaSzeregu}} == Funkcja do podmiany wyszukiwanego tekstu spełniający pewne warunki według szeregu wzorów, ale niekoniecznie, może być według tylko jednego, na inną zmodyfikowaną z poprzedniego zawartość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZamianaZnakowaSzeregu=function(szereg,wzor,funkcja_sprawdzanie_wyszukania,funkcja_zamiana,funkcja_wzor,funkcja_licznik)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} {{Patrz|szereg}} | _1 = Szeregi (ciąg znakowy) do przeanalizowania i przetworzenia. | 2 = {{Code|wzor}} {{Patrz|wzor}} | _2 = Wzór w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}} do przeszukiwania ciągów. | 3 = {{Code|funkcja_sprawdzanie_wyszukania}} {{Patrz|funkcja_sprawdzanie_wyszukania}} | _3 = Sprawdza, czy wyszukany ciąg zawiera pewny element, a jeżeli tak, to tą funkcją w nagłówku powtarzane jest wyszukiwanie aż do skutku, lub do końca szeregu, ale od pewnego znaku, ale dalszego określonego. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, sugeruje, że trzeba wywołać: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,licznik_wzor,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> W przeciwnym wypadku: <syntaxhighlight lang="lua"> tak,ile=funkcja_sprawdzanie_wyszukania(szereg,numer,numer_a,numer_b,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Parametr {{Code|tak}}, tak mówi, czy powtórzyć wyszukiwanie, a {{Code|ile}}, wskazuje ile znaków dalej ma wyszukać, a jeżeli wartość ta jest {{Code|nil}}, to ona przyjmuje wartość domyślną {{Code|1}}. | 4 = {{Code|funkcja_zamiana}} {{Patrz|funkcja_zamiana}} | _4 = Funkcja robiąca operacje na wydzielonych ciągach znakowych. Obecność funkcji: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wskazuje na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(licznik_wzor,a,b,c,d,e,f,g,h,i); </syntaxhighlight> Przeciwnie na: <syntaxhighlight lang="lua"> ciag=funkcja_zamiana(a,b,c,d,e,f,g,h,i); </syntaxhighlight> | 5 = {{Code|funkcja_wzor}} {{Patrz|funkcja_wzor}} | _5 = Funkcja sterująca powtarzaniem wyszukiwania ciągu, ale od tego samego numeru znaku, jeżeli poprzednie wyszukiwanie się nie powiodło. Funkcja może być niepodana, wtedy zmienia się zespół parametrów pewnych funkcji tych podawanych jako parametry, tzn.: {{Code|funkcja_sprawdzanie_wyszukania}} {{LinkPatrz|funkcja_sprawdzanie_wyszukania}}, i {{Code|funkcja_zamiana}} {{LinkPatrz|funkcja_zamiana}}. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> __wzor,czy=funkcja_wzor(wzor,licznik_wzor,czy); </syntaxhighlight> Funkcja ta zwraca wartość w zmiennych: {{Code|__wzor}} i {{Code|czy}}, ta pierwsza mówi, jaki jest wzór wyszukiwania, a druga, czy powtórzyć wyszukiwanie, ale względem innego niż poprzednio, zwracanego wzoru. | 6 = {{Code|funkcja_licznik}} {{Patrz|funkcja_licznik}} | _6 = Funkcja liczy numer wzoru wyszukiwanego, na podstawie tego podstawowego. Funkcja używana w skojarzeniu z funkcją: {{Code|funkcja_wzor}} {{LinkPatrz|funkcja_wzor}}, wtedy jedynie ona jest wywoływana i liczona, przeciwnie nie jest wcale używana. {{P|Definicja funkcji:}} <syntaxhighlight lang="lua"> licznik_wzor=funkcja_licznik(wzor,licznik_wzor,numer_begin); </syntaxhighlight> Parametry: {{Code|wzor}} - jest to wzór podstawowy, {{Code|licznik_wzor}} - numer wzoru, i {{Code|numer_begin}} - jest to początek wyszukiwania. }} Funkcja wykorzystuje do działania: {{LinkŚródtytuł|p.WyszukiwanieNaPodstawieWzorca}}, w celu wyszukiwanych ciągów. ; Jest podany przykład, według którego wyszukujemy odpowiednie szablony pod pewnymi warunkami{{dk}} Wyszukuje tekst wskazany przez pierwszy argument, drugi parametr jako wzór (wyszukuj szablony z podwójnymi nawiasami klamrowymi), a jeżeli ona zawiera początek następnego szablonu (funkcja wskazana przez trzeci argument), to wyszukuje ona dwa miejsca dalej znakowe, czy jest on tym właściwym szablonem bez innych szablonów, których nie ma tam tego. Następnie po wyszukaniu szablonu przez funkcję podaną jako czwarty argument, usuwa w nim odstępy, i robi z niego inny szablon. Funkcja najpierw wyszukuje według wzoru trzeciej funkcji (piąty argument), dla {{Code|licznik_wzor {{=}} 1}}, sprawdza dodatkowo, jakie są małe litery po linku, jeżeli po nim one są tam. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,licznik_wzor,numer_a,numer_b,zawartosc,dalej) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(licznik_wzor,zawartosc,dalej) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"..((licznik_wzor==1)and dalej or ""); end, function(wzor,licznik_wzor,czy) if(czy)then if(licznik_wzor==1)then return wzor.."(%l*)",true;end; end; return wzor,false; end, function(wzor,licznk_wzor,numer_begin) licznik_wzor=licznik_wzor+1; return licznik_wzor; end ); </syntaxhighlight> A jeżeli piąty argument (funkcja) nie zostanie podany, a więc i też szósty, bo wtedy on jest niepotrzebny, to w pierwszej funkcji argument trzeci można pominąć, a wdrugiej zmienną pierwszą pomijamy, bo w tych funkcjach po prostu ich nie podajemy, wtedy tę funkcję można napisać w uproszczony sposób: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaSzeregu(tekst,"%{%{(.-)%}%}", function(tekst,numer,numer_a,numer_b,zawartosc) return mw.ustring.match(zawartosc,"%{%{"),2; end, function(zawartosc) zawartosc=mw.ustring.gsub(zawartosc,"%s+",""); return "[["..zawartosc.."]]"; end ); </syntaxhighlight> Ta funkcja zwraca zmodyfikowany tekst uzyskany z omawianej funkcji. Tą funkcję możemy wykorzystać do kodowania dowolnego tekstu i operowania na nim, co jest wykorzystane, nie tylko jako przykładach, ale też jako treściwy kod według tego wspomnianego w tym module powyżej. Z funkcji tej korzystamy w module: {{Code|{{ld2|Szablonowe/Potrzebne}}}}, właśnie do kodowania tekstu. == {{Śródtytuł|p.IteratorLiniiTekstu}}{{Code|p.IteratorLiniiTekstu}} == Funkcja uzyskany tekst iteruje linia po linii według iteracji poniżej przy pomocy operacji {{Code|for}}, gdzie tam możemy robić operacje na nich, by dodać je później do tablicy: ściśle określonej przez kod, by je połączyć przy pomocy łącznika znaku nowej linii: {{Code|\n}}, jak to się łączy linie w tekście. Poniższy kod robi to samo, co przykład dla funkcji: {{LinkŚródtytuł|p.ZamianaZnakowaLinii}}, tylko, że dłużej kodowo, ale wychodzi na to samo. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.IteratorLiniiTekstu(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst, z którego są wydzielane kolejne linie. }} Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); local iter=szeregi_modul.IteratorLiniiTekstu(tekst); local tab_linia={}; for linia in iter do linia=mw.ustring.gsub(linia,"%s+",""); table.insert(tab_linia,linia); end; tekst=table.concat(tab_linia,"\n"); </syntaxhighlight> == {{Śródtytuł|p.ZamianaZnakowaLinii}}{{Code|p.ZamianaZnakowaLinii}} == Funkcja zamienia tekst uzyskany wstawiony do pierwszego argumentu tej funkcji, gdzie poszczególne linie są zmieniane przez anonimową funkcję podaną jako drugi argument. Jeżeli ta funkcja zwraca {{Code|nil}} dla jakieś linii, to ta linia nie jest zmieniana, tylko przypisywana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZamianaZnakowaLinii(szereg,funkcja)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szereg}} | _1 = Szereg do przetworzenia, z którego są wydzielane kolejne linie i są robione na nich pewne operacje. | 2 = {{Code|funkcja}} | _2 = Funkcja robiąca operacje na kolejnych liniach, nawet pustych. }} Funkcja korzysta z innej: {{LinkŚródtytuł|p.IteratorLiniiTekstu}}, w celu uzyskiwania kolejnych linii tekstu, linie są oddzielone znakiem: {{Code|\n}}, w ogólnym podanym tekście. Przykład wywołania: <syntaxhighlight lang="lua"> local title=mw.title.makeTitle("Wikibooks","Moduły/Szeregi"); local tekst=title:getContent(); local szeregi_modul=require("Module:Szeregi"); tekst=szeregi_modul.ZamianaZnakowaLinii(tekst,function(linia) local linia,ile=mw.ustring.gsub(linia,"%s+",""); if(ile>0)then return linia;end; return nil; end); </syntaxhighlight> Ta funkcja usuwa wszystkie odstępy w liniach, ale nie pomiędzy liniami. == {{Śródtytuł|p.SzeregiOmijanieFunkcyjne}}{{Code|p.SzeregiOmijanieFunkcyjne}} == Funkcja do operacji na szeregach (ciągach), przy pomocy pewnej funkcji, z pominięciem pewnych ciągów określonym, jako opisywanym przez wzór (zmienna {{Code|wzor}}), podanym do parametru funkcji z operacją na nich podanym jako druga funkcja {{Code|funkcja2}}. Funkcja do swojego działania wykorzystuje funkcję: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoru|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Funkcja zwraca przetworzony tekst: {{Code|tekst}} {{LinkPatrz|tekst-p.SzeregiOmijanieFunkcyjne}}, przez funkcję: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, jeśli; {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}} {{Code|{{=}}}} {{Code|false}}, a jeśli ta zmienna jest przeciwna, to elementy niepomijalne są przekształcane przez tą samą funkcją, a elementy pomijalne wykryte przez {{Code|wzor}} {{LinkPatrz|wzor-p.SzeregiOmijanieFunkcyjne}}, są przekształcane natomiast przez: {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzeregiOmijanieFunkcyjne(tekst,normalnie,wzor,funkcja,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} {{Patrz|tekst-p.SzeregiOmijanieFunkcyjne}} | _1 = Tekst do przetworzenia, omijając pewne elementy, jeżeli drugi element odpowiada wartości logicznej {{Code|false}}, przeciwnie już nie. | 2 = {{Code|normalnie}} {{Patrz|normalnie-p.SzeregiOmijanieFunkcyjne}} | _2 = Czy ma przetwarzać tekst pomijając, w przeciwnym wypadku tak nie robi. | 3 = {{Code|wzor}} {{Patrz|wzor-p.SzeregiOmijanieFunkcyjne}} | _3 = Wzór do elementów pomijanych, wzór może mieć do ośmiu elementów przechwytywanych. | 4 = {{Code|funkcja}} {{Patrz|funkcja-p.SzeregiOmijanieFunkcyjne}} | _4 = Funkcja robiąca operacje na przetworzonych subciągach bez elementów pomijanych. {{P|Definicja:}} <syntaxhighlight lang="lua"> ciag=funkcja(ciag); </syntaxhighlight> Jest to funkcja zamiany ciągu niepomijalnego, w inny ciąg, a jeżeli ona nie istnieje, wtedy te ciągi nie są przekształcane. | 5 = {{Code|funkcja2}} {{Patrz|funkcja2-p.SzeregiOmijanieFunkcyjne}} | _5 = Funkcja używana gdy: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej prawdziwej. Co ma robić z częściami elementów pomijanych, czyli z elementami przechwytywanymi, funkcja przyjmuje do dziewięciu parametrów przechwytywania w podanym wzorze {{Code|wzor}}, tzn.: <syntaxhighlight lang="lua"> element_pomijany=funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9); </syntaxhighlight> Gdy nie ma tej funkcji, to elementem pomijanym jest: <syntaxhighlight lang="lua"> element_pomijany=kod_1 or ""; </syntaxhighlight> }} === Rozważane przypadki drugiej zmiennej === ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości fałszywej ==== Jeśli: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość fałszywą, wtedy jest tylko zamiana podanego tekstu według: <syntaxhighlight lang="lua"> tekst=funkcja and funkcja(tekst) or tekst; </syntaxhighlight> Jeżeli funkcja: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, nie istnieje, to ten ciąg zwracany, wcale nie będzie przekształcony. ==== Jeśli zmienna: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, odpowiada wartości prawdziwej ==== Funkcja wywołuje na początku moduł przed pętlą, jeżeli parametr: {{Code|normalnie}} {{LinkPatrz|normalnie-p.SzeregiOmijanieFunkcyjne}}, ma wartość odpowiadającej wartości prawdziwej: <syntaxhighlight lang="lua"> local stronicowyparser_analizaspisurzeczy_modul=require("Module:StronicowyParser/AnalizaSpisuRzeczy"); </syntaxhighlight> Zdefiniujmy tabelę ciągów: <syntaxhighlight lang="lua"> local tab_str={}; </syntaxhighlight> Funkcja wyszukująca w tej funkcji, wywoływana w pętli, elementy pomijalne: <syntaxhighlight lang="lua"> local kod_1;local kod_2;local kod_3;local kod_4;local kod_5;local kod_6;local kod_7;local kod_8;local kod_9; pozycja1,pozycja2,kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,wzor,pozycja2+1,#tekst,false); </syntaxhighlight> Element niepomijalny jest wyznaczany, na podstawie powyższego przedstawienia, i jest wsadzany do tabeli: <syntaxhighlight lang="lua"> ciag=(pozycja_poczatek<pozycja1) and mw.ustring.sub(tekst,pozycja_poczatek,pozycja1-1) or ""; pozycja_poczatek=pozycja2+1; table.insert(tab_str,ciag); </syntaxhighlight> A element pomijalny jest przekształcany, i wstawiany do tabeli: <syntaxhighlight lang="lua"> ciag=funkcja2 and funkcja2(kod_1,kod_2,kod_3,kod_4,kod_5,kod_6,kod_7,kod_8,kod_9) or kod_1 or ""; table.insert(tab_str,ciag); </syntaxhighlight> Na samym końcu są doliczane do ciągów niepomijalnych, pod warunkiem sensowności istniejących zwracanych dwóch pierwszych parametrów, umieszczanych w tabeli: <syntaxhighlight lang="lua"> pozycja_temp=pozycja_temp or 0; local pozycja1,pozycja2,ciag=stronicowyparser_analizaspisurzeczy_modul.SzukanieNaPodstawieWzoru(tekst,"(.-)$",pozycja_temp+1,#tekst,false); if((pozycja1)and(pozycja2)and(pozycja1<=pozycja2))then ciag=funkcja and funkcja(ciag) or ciag; table.insert(tab_str,ciag); end; </syntaxhighlight> Przy zwracaniu wyniku jest pisane: <syntaxhighlight lang="lua"> local str=table.concat(tab_str,""); return str; </syntaxhighlight> Zatem jest zwracany przekształcony ciąg zarówno ze strony niepomijalnej, jak i pomijalnej. A jeżeli funkcje obie: {{Code|funkcja}} {{LinkPatrz|funkcja-p.SzeregiOmijanieFunkcyjne}}, i {{Code|funkcja2}} {{LinkPatrz|funkcja2-p.SzeregiOmijanieFunkcyjne}}, nie istnieją, to ten ciąg zwracany, wcale nie będzie przekształcony. === Przykład kodu na stronie modułów z przykładami na stronie ich opisów === Popatrz na wyniki kodu, w {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, w specjalnej ramce w: {{m|Wikibooks/Przykład/Szeregi/SzeregiOmijanieFunkcyjne/}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2et37wejcw6tzgwqsagpi9691uyz3el Wikibooks:Moduły/StronicowyParser/GłównaFunkcjaZbieraniaDanychStron 4 63513 558257 551536 2026-10-01T23:46:10Z Persino 2851 /* {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} */ 558257 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zmienna obiektowa ramki tablicy transportu. == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}. === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} - pełna nazwa strony. === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _9 = Nazwa aktualna, czy bieżąca strony. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału, | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> skitkv3xpli1chcdto545zfkki3jbof 558258 558257 2026-10-01T23:47:36Z Persino 2851 /* {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} */ 558258 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zmienna obiektowa ramki tablicy transportu. == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}. === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} - pełna nazwa strony. === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału, | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nluw7vtecgtz7coiw5b271daz29y6jv 558259 558258 2026-10-01T23:48:11Z Persino 2851 /* Zbieranie informacji o stronie w pętli generowanej przez iterator */ 558259 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zmienna obiektowa ramki tablicy transportu. == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}. === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} - pełna nazwa strony. === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4enu2qc8ukh6trop7ffo5sysh473csh 558260 558259 2026-10-01T23:50:37Z Persino 2851 /* {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} */ 558260 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zmienna obiektowa ramki tablicy transportu. == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. }} === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} | _1 = Pełna nazwa strony. }} === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> afqk3n4rrzrilt1b1myxyg3w1lwm8v7 558261 558260 2026-10-01T23:51:03Z Persino 2851 /* {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} */ 558261 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{Patrz|self}} - zmienna obiektowa ramki tablicy transportu. == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. }} === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} | _1 = Pełna nazwa strony. }} === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ogci0i2jzo70tdc0t586zvbrnhvh41r 558262 558261 2026-10-01T23:51:48Z Persino 2851 /* {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} */ 558262 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa ramki tablicy transportu. }} == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. }} === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} | _1 = Pełna nazwa strony. }} === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisPaarametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> a5s8h8brpz2ulumadm20sv77j5hlw16 558263 558262 2026-10-01T23:52:46Z Persino 2851 /* {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} */ 558263 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa ramki tablicy transportu. }} == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. }} === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} | _1 = Pełna nazwa strony. }} === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabele tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszyskie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A póżniej z adresów pliczonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest ruchumianiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warukowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 6575dg3ssklsrgq888p62p08l9ujtju 558264 558263 2026-10-01T23:57:33Z Persino 2851 558264 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa ramki tablicy transportu. }} == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. }} === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} | _1 = Pełna nazwa strony. }} === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabelę tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszystkie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A później z adresów policzonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest uruchomiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warunkowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na {{Strong|HTML}} nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> l9xgr783sng6e6jcjz9hdi4b7nsh2c5 558265 558264 2026-10-01T23:58:12Z Persino 2851 558265 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/GłównaFunkcjaZbieraniaDanychStron}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.PobieranieInformacjiRamkiRozpatrywanejStrony}}{{Code|p.PobieranieInformacjiRamkiRozpatrywanejStrony}} == Pobieranie danych z obiektu {{LinkPatrz|self}}, biorąc jego podtablicę o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{Patrz|tabela_listy_danych_analizy_ksiazki}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiRamkiRozpatrywanejStrony(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa ramki tablicy transportu. }} == {{Śródtytuł|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}}{{Code|p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi}} == Funkcja uruchamiacz, główna funkcja dzięki, której ładują się informacje według modułu: {{Code|{{ld2|StronicowyParser/informacje}}}} (tam jest użyty). Ten ładowacz jest pokazany w module opis: {{Code|{{lr2|Moduły/StronicowyParser/informacje}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobieranieInformacjiKorzystanejStronyWrazSkojarzonymi(self)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. }} === {{Śródtytuł|DaneNazw}}{{Code|DaneNazw}} === Funkcja licząca nazwy podanej nazwy strony, tzn.: {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} {{Patrz|nazwa_artykulu}}, oraz zwracające te kolejno nazwy. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function DaneNazw(pelna_nazwa_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|pelna_nazwa_strony}} {{Patrz|pelna_nazwa_strony}} | _1 = Pełna nazwa strony. }} === Dalsza część funkcji - Tom I === ==== Tworzenie i inicjowanie początkowych tabel ==== Funkcja tworzy podtabelę tabeli zmiennej obiektowej {{LinkPatrz|self}} o kluczu: {{Code|tabela_listy_danych_analizy_ksiazki}} {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, o wartości pustej. Następnie są tworzone podtabele puste w tej ostatniej o kluczach: {{Code|dane_analizy_stron}} {{Patrz|dane_analizy_stron}} i {{Code|licencja}}{{Patrz|licencja}}, oraz nilowe zmienne z tego samego, co ostatnie, o kluczu: {{Code|problemy}} {{Patrz|problemy}}. ==== Zmienne nazw strony bieżącej, czy nawet aktualnej, w zależności, czy istnieją odpowiednie ustawienia ==== Jest liczony adres strony, na której jest uruchomiona dana strona, wewnętrznej bezparametrowo według: {{Code|{{sr|#p["PełnaNazwaArtykułu"]|p=Książkowe}}}} {{Patrz|strona_aktualna}} (jest liczona pełna nazwa strony bieżącej), co z tego są liczone z niego: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, co z tego jest wyznaczana pełna nazwa książki {{Code|pelna_nazwa_ksiazki}} {{Patrz|pelna_nazwa_ksiazki}}. ==== Zbieranie danych ustawień z: {{Code|.../config}}, jeśli istnieją ==== Jest liczony pełny adres ustawień: {{Code|pelna_nazwa_ksiazki_ustawienia}} {{Patrz|pelna_nazwa_ksiazki_ustawienia}}, według schematu: {{Code|"Szablon:Podręcznik/Ustawienia/"..pelna_nazwa_ksiazki}} {{Patrz|UstawieniaKsiążki}}. Co z tego jest sprawdzane, czy istnieje strona: {{Code|pelna_nazwa_ksiazki_ustawienia.."/config"}} {{Patrz|config}}, a jeśli tak, to wtedy wiemy, że to jest szablon, to go przedstawiamy w postaci szablonowej, licząc z: {{Code|{{sr|#p.NazwaSzablonu|p=Szablonowe}}}}. Dalej jest liczony ostatni wyliczony szablon z parametrem {{Code|książka}} {{Patrz|książka}}, dalej jeszcze raz, tym razem z parametrem: {{Code|artykuł}} {{Patrz|artykuł}} - te parametry przedstawiają parametry artykułu książkowego, skąd możemy ściągać stronę, by ją wyświetlić na stronie aktualnej, na pewno parametr {{LinkPatrz|książka}} nie może być parametrem składających z samych znaków odstępów, a jeśli tak jest, w takim razie z tych dwóch parametrów jest liczony parametr {{Code|strona}} {{Patrz|strona}}. Dalej liczymy, czy ona jest poprawnym adresem, używając funkcji: {{Code|{{sr|#p["CzyNiepoprawnaNazwa"]|p=Pudełko/Tom I}}}}. A jeżeli adres jest jednak poprawny, ta funkcja zwraca wartość odpowiadającej fałszywej wartości, wtedy jest liczony pełny adres strony z: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, jeżeli ona jest adresem względnym, ale nie musi być, z parametrów, tzn. parametr pierwszy: {{LinkPatrz|strona}} (możliwie względny), i parametr drugi: {{LinkPatrz|strona_aktualna}} (zawsze jest adresem bezwzględnym), co względem tej funkcji mamy już: {{LinkPatrz|strona}}, czyli po tej operacji (procedurze) policzyliśmy bezwzględny jego adres. ===== Liczenie nazw z parametru pełnej nazwy aktualnej, nie bieżącej, strony wynikłe z obliczeń z ustawień ===== Policzona wartość strony: {{LinkPatrz|strona}}, jest sprawdzana, czy adres (strona), pod którym ona się kryje, istnieje, wykorzystując do tego funkcji: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}, a jeśli tak, to ten adres jest tylko formatowany. Porównujemy adres {{LinkPatrz|strona}} z {{LinkPatrz|strona_aktualna}}, czy przedstawiają nie ten sam adres, a jeżeli tak, to liczymy wszystkie nazwy strony, czyli dla bez {{Code|aktualna_}}, przyrównujemy do tego z tym początkiem, co odpowiada pełnej nazwie strony z {{Code|strona_aktualna}} {{LinkPatrz|strona_aktualna}} {{ZobaczTeż|strona_aktualna}}, i wyznaczamy nazwy strony bez tego początku, używając funkcji: {{LinkŚródtytuł|DaneNazw}}, ze zmiennej: {{Code|strona}} {{LinkPatrz|strona}} {{ZobaczTeż|strona}}. Te ostatnie nazwy są potrzebne do analizy strony bieżącej, nie aktualnej, tzn. na niej, jakie są szablony, jakie posiada spisy, jakie książki, a w nim spisy do nich, są dołączone. ====== Policzone nazwy strony aktualnej wpisane do ogólnej tablicy ====== A później z adresów policzonych wywołania, dotyczącej tego aktualnego, liczymy dla podtabeli: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienne o kluczach: {{Code|aktualna_nazwa_przestrzeni}} {{Patrz|aktualna_nazwa_przestrzeni}}, {{Code|aktualna_nazwa_przestrzeni_ksiazki}} {{Patrz|aktualna_nazwa_przestrzeni_ksiazki}}, {{Code|aktualna_nazwa_ksiazki}} {{Patrz|aktualna_nazwa_ksiazki}} i {{Code|aktualna_nazwa_artykulu}} {{Patrz|aktualna_nazwa_artykulu}}, mając zmienne nazw policzone z tego aktualnego. ===== Czy strona bieżąca, ale nie zbiorcza, jest wyświetlana na stronie aktualnej, czy może jest tylko stroną zbiorczą uruchomioną pod inną nazwą ===== Jeśli zmienne nazw są policzone z: {{LinkZobaczTeż|strona}} i {{LinkZobaczTeż|strona_aktualna}}, to wtedy kolejno porównujemy, czy któreś z nich są sobie nierówne, a jeśli tak, to wywołujemy szablon z parametru: {{Code|zastępcza}} {{ZobaczTeż|zastępcza}} - jest to, czy strona jest zbiorcza, o nazwie: {{LinkPatrz|config}}, czy powinna być wartością niepustą. A jak tak, to wyznaczamy z tablicy: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}}, zmienną o kluczu: {{Code|alternatywna}} {{Patrz|alternatywna}}, co przyrównujemy jemu wartość logiczną z uzyskanego z szablonu z parametrem {{LinkZobaczTeż|zastępcza}}, a jeżeli ta zmienna przyjmuje wartość odpowiadająca fałszywej, wtedy zmienna z tej samej tablicy o kluczu: {{Code|inna_strona_aktualna_niz_biezaca}} {{Patrz|inna_strona_aktualna_niz_biezaca}} - jest to, czy strona jest inna niż zbiorcza, ale wyświetlana na innej stronie, przyjmuje wartość prawdziwą. === Dalsza część funkcji - Tom II === Tworzymy zmienną: {{Code|tablica_zmiennych}}, która jest tablicą pustą, którą uzupełniamy o elementy o kluczach: {{Code|tabela_listy_danych_analizy_ksiazki2}} {{Patrz|tabela_listy_danych_analizy_ksiazki2}} - są to dane zebrane z bieżącej strony, i {{Code|linkobiekt}} {{Patrz|linkobiekt}} - są to dane zebrane o linkach na stronie odpowiadających poszczególnym obiektom. Uruchamiamy funkcję: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}, z której wyznaczamy parametr: {{Code|tabela_listy_danych_analizy_ksiazki}} - są to dane zebrane z bieżącej i innych stron skojarzonej z nim, te elementy są tylko w postaci nieprzetworzonej, ale przygotowanej. A jeśli ten parametr jest tabelką - a jeżeli nie jest, to nastąpił błąd przetwarzania, i funkcja nie idzie dalej w instrukcję warunkową, wtedy wywołujemy funkcję: {{Code|{{sr|#p.PrzetwarzanieZebranychInformacjiDanejKorzystanejStrony|p=StronicowyParser/NumeracjaObiektówStron}}}}. === Dalsza część funkcji - Tom III === Na sam koniec funkcji zwracamy tablicę: {{LinkPatrz|tabela_listy_danych_analizy_ksiazki}} - ta zmienna zawiera dane w postaci przetworzonej policzonej, tzn. uchwytom są przydzielone numeracje, sprawdzane, czy uchwyty są policzone, są wyznaczone wszystkie kody problemów, które później są potrzebne do wyznaczania wszystkich kategorii błędów na stronie. == {{Śródtytuł|p.SpisRzeczyWedlePodanegoTekstu}}{{Code|p.SpisRzeczyWedlePodanegoTekstu}} == Funkcja generowania liczenia nagłówków strony, co na tej podstawie może być generowany '''spis treści''' strony. Funkcja przyporządkowuje uchwytom szablonów nagłówków ich identyfikatory i te nagłówki, w którym one leżą, jeżeli zmienna {{LinkPatrz|obiekty}} istnieje. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpisRzeczyWedlePodanegoTekstu(self,tekst_artykulu,nazwa_strony,czy_artykul_korzystany, tylko_naglowek,obiekty,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_artykulu,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tablica_obiektow_strony_danych_kodow_specjalnych_modul,KtorySzablonMaZwracacKategorie,wzory_zamiast_kodow,tabela_elementow_strony_kodow)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}} | _2 = Tekst przetworzony, przygotowany ewentualnie przez pewną funkcję, rozważanego artykułu. | 3 = {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} | _3 = Nazwa strony, danego spisu. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy strona jest bieżąca. | 5 = {{Code|tylko_naglowek}} {{Patrz|tylko_naglowek}} | _5 = Pisz adresy stron z tylko nagłówkami '''#''', bez adresów stron. | 6 = {{Code|obiekty}} {{Patrz|obiekty}} | _6 = Elementy tam zebrane, są wykorzystywane do analizy nagłówków poprzez szablon {{s|Śródtytuł}}, któremu temu nagłówkowi odpowjada pewien uchwyt, czy uchwyty. | 7 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} i {{Code|nazwa_artykulu}} | _7 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, {{LinkPatrz|nazwa_ksiazki}} i {{LinkPatrz|nazwa_artykulu}}. | 8 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca}} | _8 = Uchwyt do bazy danych kodowania tekstu. | 9 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} {{Patrz|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _9 = Nazwa aktualna, czy bieżąca strony. szablonowa strony, w wersji w jakiej się wywołuje wywołania szablonowe. | 10 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _10 = Tabela bazy zebranych informacji w postaci zakodowanej modułu {{m|Szablonowe}}. | 11 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _11 = Tabela przeanalizowanych elementów bazy {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} {{Patrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}} | _12 = Tablica dwuwymiarowa kodów o kluczach: szablonów referencji: '''REF...''' i '''POSTMATH''' oraz ich elementu numeru kodu {{Code|kod}}, którego elementem jest kod tego elementu. | 13 = {{Code|KtorySzablonMaZwracacKategorie}} {{Patrz|KtorySzablonMaZwracacKategorie}} - tabela składająca się z trzech elementów, którego pierwszy element to: {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{Patrz|KtorySzablonMaZwracacKategorieNaglowek}} - funkcja dla szablonów problemów dla jak: {{s|Śródtytuł}}, w nagłówku, drugi: {{Code|KtorySzablonMaZwracacKategorieTekst}} {{Patrz|KtorySzablonMaZwracacKategorieTekst}} - funkcja dla tego typu szablonów, ale dla nich w tekście, nie w nagłówku, trzeci: {{Code|CzyJestTakiProblemJakoElementTablicy}} {{Patrz|CzyJestTakiProblemJakoElementTablicy}} | _13 = Czy nie rozważać, dla rozdziałów zerowych, przeciwnie: ta funkcja może przyjmować wartość {{Code|nil}}, wartość zwracana tego elementu, bo to jest funkcja, zależy, czy jest ustawiony kod problemu: {{Code|nagłówek w tekście rozdziału w stronie korzystanej}} {{Patrz|nagłówek w tekście rozdziału w stronie korzystanej}}, a jeżeli jest taki, to ta funkcja przyjmuje zrzuconą wartość {{Code|true}}. | 14 = {{Code|wzory_zamiast_kodow}} {{Patrz|wzory_zamiast_kodow}} | _14 = Rozważaj wzory według tablicy: {{LinkPatrz|tablica_obiektow_strony_danych_kodow_specjalnych_modul}}, lub koduj, to według funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}, to wykorzystuj w przypadku, gdy: {{LinkPatrz|nazwa_strony}}, istnieje, i jest wartością pustą, lub {{Code|{{sr|#p.NormaKoduZakodowanegoWikiTekstu|p=Szablonowe}}}} - przeciwnie. | 15 = {{Code|tabela_elementow_strony_kodow}} {{Patrz|tabela_elementow_strony_kodow}} | _15 = baza tabela z zapamiętanymi podtabelami, którego poszczególne elementy wykorzystywane w spisie posiadają w sobie tylko pierwszy element w postaci przetworzonego uchwytu, bo używamy tylko uchwytów szablonów nagłówków. }} === {{Śródtytuł|SpecjalneWprowadzeniaTekstu}}{{Code|SpecjalneWprowadzeniaTekstu}} === Funkcja zamieniające pewne szablony, czy znaczniki, na rozdziały równaniowe. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local SpecjalneWprowadzeniaTekstu=function(szablon,obiekt,kod,czy_szablon,czy_znacznik,czy_liczyc,funkcja1,funkcja2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} {{Patrz|szablon}} | _1 = Zmienna (szablon), nie musi być to normalny szablon. | 2 = {{Code|obiekt}} {{Patrz|obiekt}} | _2 = Zmienna, którego typu jest obiekt. | 3 = {{Code|kod}} {{Patrz|kod}} | _3 = Numer obiektu typu {{LinkPatrz|obiekt}}. | 4 = {{Code|czy_szablon}} {{Patrz|czy_szablon}} | _4 = Czy to jest szablon. | 5 = {{Code|czy_znacznik}} {{Patrz|czy_znacznik}} | _5 = Czy to jest znacznik. | 6 = {{Code|czy_liczyc}} {{Patrz|czy_liczyc}} | _6 = Czy funkcję liczyć w sposób złożony, szablony typu: {{s|SpisTreści}} - zamieniający go na znacznik, czy prosty, co na samym końcu uruchamiana jest funkcja: {{LinkPatrz|funkcja1}}. | 7 = {{Code|funkcja1}} {{Patrz|funkcja1}} | _7 = Funkcja operująca na wygenerowanym pośrednio (dłuższe liczenie) lub bezpośrednio (krótsze) znaczniku, wychodząca z szablonu, i zamieniająca go na rozdział równaniowy, funkcja operująca dla szablonów: {{s|SpisTreści}} lub {{s|HNumer}}, | 8 = {{Code|funkcja2}} {{Patrz|funkcja2}} | _8 = funkcja operująca na znaczniku '''HTML''' nagłówka - typu jak: {{Tag|h1}}, i zamieniająca go na rozdział równaniowy. }} ==== {{Śródtytuł|ParametrNR}}{{Code|ParametrNR}} ==== Funkcja liczy dokładnie parametr dany o danym numerze, zbiór danych parametrów oznaczających to samo może być wiele, tylko że jedne mogą być ważniejsze od drugich. Definicja skrótowa funkcja: <syntaxhighlight lang="lua"> local function ParametrNR(numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer}} {{Patrz|numer}} | _1 = Numer parametru. }} Funkcja wykorzystywuje funkcję do uruchomienia: {{Code|{{sr|#p.SpisRzeczySzablon|p=StronicowyParser/Potrzebne}}}}, do generowania parametrów, a właściwie ich wartości. ==== {{Śródtytuł|ObiektKodNumer}}{{Code|ObiektKodNumer}} ==== Funkcja dodająca do bazy danych kolejny element bazy: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, dla danego obiektu element na samym końcu, po maksymalnym elemencie do niego. Funkcja liczy kod przy pomocy funkcji: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local ObiektKodNumer=function(szablon,obiekt)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. }} ==== Dalszy opis funkcji ==== Dla {{LinkPatrz|czy_szablon}} prawdziwego dla szablonów sztucznego spisu treści, sprawdzanego przez tabelkę: {{Code|{{sr|#p.szablony_sztucznego_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}}, dla danego szablonowego rozdziału generowanego według {{s|HNumer}}, jest on zamieniany na rozdział równaniowy poprzez funkcję: {{LinkPatrz|funkcja1}}. Ta tabela przedstawia się treścią: <syntaxhighlight lang="lua"> p.szablony_sztucznego_wprowadzenia_tekstu={ ["HNumer"]=1, }; </syntaxhighlight> Dla innych rozdziałów szablonowych, tym razem generowanego przez szablon {{s|SpisTreści}}, którego parametry są wyznaczane przez funkcję: {{LinkŚródtytuł|ParametrNR}}, tabelka parametrów opisująca to: <syntaxhighlight lang="lua"> p.szablony_spisu_rzeczy_artykularnego_wprowadzenia_tekstu={ ["SpisTreści"]={{"artykuł",1,},{"książka",2,},{"nazwa",3,},{"dodatek",4,},{"poziom",},}, }; </syntaxhighlight> Funkcja liczy artykuł, koloruje do niego link w: '''spisie treści''', na czerwona, wtedy generuje dodatkowy znacznik, z właściwością: {{Code|color:red}}, gdy on nie istnieje, i to wstawia do tabeli bazy, lub bez niego, wtedy bezposrednio generuje tekst równy nazwie tego szablonu, opakowany, lub nie, w zależności od istnienia. Do policzenia strony, czy ona istnieje, musi być przedtem zdekodowany funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, by później policzyć to sprawdzenie przy pomocy: {{Code|{{sr|#p.PoliczZbiory|p=Techniczne}}}}. W każdym bądź razie jest uruchomiana funkcja: {{LinkPatrz|funkcja1}}. Gdy to nie jest szablon, tzn.: {{LinkPatrz|czy_szablon}}, jest fałszywe, ale {{LinkPatrz|czy_znacznik}} jest prawdziwe, to takie znaczniki, jak od: {{Tag|h1}} do {{Tag|h6}}, są zamieniane na czysty tekst. W takim razie wywoływana jest dla tego przypadku funkcja: {{LinkPatrz|funkcja2}}. Funkcja: {{LinkPatrz|funkcja1}}, jest dla szablonów nagłówków, a: {{LinkPatrz|funkcja2}}, dla znaczników nagłówków. Z tych generowanych czystych generowanych tekstów są tworzone w tekście rozdziały równaniowe, by później wygenerować '''spis treści''', właśnie z nimi - z tymi nagłówkami, a bardziej ściśle linkami do nich. === {{Śródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}{{Code|SzablonNaglowkujWNaglowkuRozdzialu}} === Fukcja do obsługi nagłówków {{LinkPatrz|Śródtytuł}} w nagłówku, nie w tekście poza nim. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWNaglowkuRozdzialu(szablon,obiekt,kod,powtorka,parametry_wywolania_szablonu,nazwa_szablonu_wywolania,modyfikatory_wywolania)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. | 4 = {{Code|powtorka}} {{Patrz|powtorka}} | _4 = Numer użycia takiego samego szablonu typu {{s|Śródtytuł}} {{Patrz|Śródtytuł}}. | 5 = {{Code|parametry_wywolania_szablonu}} {{Patrz|parametry_wywolania_szablonu}} | _5 = Parametry szablonu wraz z ich wartościami. | 6 = {{Code|nazwa_szablonu_wywolania}} {{Patrz|nazwa_szablonu_wywolania}} | _6 = Nazwa szablonu wywołania. | 7 = {{Code|modyfikatory_wywolania}} {{Patrz|modyfikatory_wywolania}} | _7 = Modyfikatory szablonu. }} Funkcja sprawdza, czy szablon w nagłówku jest typu {{LinkPatrz|Śródtytuł}}, a jeżeli tak, to liczy jego uchwyt, najpierw wyznacza je z parametru o nazwie {{Code|uchwyt}} {{Patrz|uchwyt}}, dalej sprawdzane jest, czy taki uchwyt tak zdefiniowany istnieje, jeśli tak, to wydobywana jest jego przetworzona tabela z tym właśnie uchwytek, funkcja robi to względem numeru {{Code|kod}} {{LinkPatrz|kod}} tego szablonu na podstawie funkcji: {{Code|{{sr|#p.WydobywanieUchwytuZeiBezNumeracji|p=StronicowyParser/ZbieranieDanychStron}}}}. Jeżeli wydobyta tabela {{Code|lista_dwuelementowa}} {{Patrz|lista_dwuelementowa}} nie istnieje, w takim razie jest ona dekodowana funkcją: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, a później jest traktowana jako adres '''URL''', tzn. jest dekodowana funkcją: {{Code|{{sr|#p.DecodeHtml|p=Html}}}}, dalej jest tworzona tabela pusta: {{LinkPatrz|lista_dwuelementowa}}, co dalej jest tam wstawiana do niej jako pierwszy element uzyskany uchwyt przetworzony. A jeśli jednak {{LinkPatrz|lista_dwuelementowa}} została wydobyta z naszej funkcji tabela, która istnieje, wtedy funkcja idzie, niż poprzednio, w inny krok instrukcji warunkowej, wtedy z tej tabeli jest wydobywany pierwszy element jako przetworzony wcześniej uchwyt. Gdy {{ZobaczTeż|uchwyt}} przetworzony uchwyt jest łańcuchem znaków niepusty, wtedy on jest dodawany w postaci tabeli, w której jest ten uchwyt, na sam koniec tabeli {{Code|numeracja}} {{Patrz|numeracja}}. Gdy liczba powtórzeń jest większa niż zero, wtedy jest wywoływana funkcja, przy którym mają być zwrócone kategorie, jeśli zostaną użyte, o nazwie {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}}. Gdy jednak uchwyt uzyskany nie istnieje, to wtedy jest to samo robione, co w: {{LinkZobaczTeż|uchwyt}}. Przed zwróceniem ile razy została dokonana powtórka, jest powiększany licznik powtorek, i to jest otrzymywane z tej funkcji. === {{Śródtytuł|SzablonNaglowkujWTekscieRozdzialu}}{{Code|SzablonNaglowkujWTekscieRozdzialu}} === Funkcja do analizy szablonów nagłówków w tekście rozdziału, nie w nagłówku. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonNaglowkujWTekscieRozdzialu(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} Funkcja sprawdza, czy tekst w bazie kodów jest typu: {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, w takim razie po wykryciu, że dla tego, że jest to wywołanie szablonowe, a nie instrukcja warunkowa w wikikodzie w tekście, wtedy podobnie jest robione, co w funkcji: {{LinkŚródtytuł|SzablonNaglowkujWNaglowkuRozdzialu}}, tylko zamiast {{Code|KtorySzablonMaZwracacKategorieNaglowek}} {{LinkPatrz|KtorySzablonMaZwracacKategorieNaglowek}} jest {{Code|KtorySzablonMaZwracacKategorieTekst}} {{LinkPatrz|KtorySzablonMaZwracacKategorieTekst}}. Przy wykryciu tam szablonu typu {{LinkPatrz|Śródtytuł}}, funkcja zawsze zwraca wartość {{Code|true}}, w innych przypadkach {{Code|false}}. W przypadku intrukcji warunkowej w wikikodzie i dla ramki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, jest wtedy zwracana wartość {{Code|false}}. Funkcja w pozostałych przypadkach zwraca wartość logiczną {{Code|false}}. === {{Śródtytuł|SzablonyWywolywane}}{{Code|SzablonyWywolywane}} === Szablon zamieniający specjalne znaki szablonów, tzn.: {{Code|{{((}}}}, {{Code|{{))}}}}, {{Code|{{!}}}} i {{Code|{{=}}}}, kolejno na: {{Code|{{s|((}}}}, {{Code|{{s|))}}}}, {{Code|{{s|!}}}} i {{Code|{{s|{{=}}}}}}, takich {{ZobaczTeż|StronicowyParser}}, które zawierają wywołania '''Stronicowego Parsera''', czyli ramki typu: {{Code|{{m|StronicowyParser}}}}, czy: {{Code|{{m|StronicowyParser/}}}}, a inne są po prostu przypisywane. W przypadku linków, i nie tylko, tzn. dla szablonów {{LinkZobaczTeż|StronicowyParser}}, z innych stron niż korzystana, co jest trafnie oznaczone zaprzeczeniem parametru {{LinkPatrz|czy_artykul_korzystany}} są liczone parametry pudełkowe {{Code|{{m|Pudełko}}}}. Strony wskazane przez te parametry są analizowane, przy czym linki są przez inną funkcję, a inne już przez znów inną. Szablony nagłówków typu {{LinkPatrz|Śródtytuł}}, czy szablonów stronicowych otwierających i zamykających, one lub jego koledzy, tzn. ich: {{s|StronaStart}} i {{s|StronaKoniec}}, są zastępowane ciągiem pustym. Inne parametry opisane z tabeli {{Code|{{sr|#p.szablony_stronicowe_kontenerowe_formatowania_wzorowego|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, są zastępowane ich zawartością, by uniknąć kontaktu nagłówków z tego typu szablonami. Szablony ideksowania określone tabelą: {{Code|{{sr|#p.szablony_indeksowania}}}} {{Patrz|p.szablony_indeksowania}}, nie są rozwijana z kodowania lub są, w zależności, czy zmienna: {{Code|czy_indeksowanie}} {{Patrz|czy_indeksowanie}}, ma wartość {{Code|true}} - tutaj są, czy odpowiadającej fałszywej wartości logicznej - a tutaj już nie. W przypadku instrukcji warunkowych, czy ramek {{lpg|Lua}} w {{lpg|Lua|Scribunto}}, one są rozwijane - kod tego jest zawartością {{LinkPatrz|szablon}}. W innych przypadkach funkcja zwraca wartość {{Code|nil}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywane(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} W powyższym opisie występują szablony opisane w: {{LinkPatrz|p.szablony_stronicowe_kontenerowe_formatowania_wzorowego}}, a jej definicja jest: <syntaxhighlight lang="lua"> p.szablony_stronicowe_kontenerowe_formatowania_wzorowego={ ["Formuła"]=1; }; </syntaxhighlight> Jest to szablon: {{s|Formuła}} i podobne, liniowe wstawiane do tekstu, ta tabela ma za zadanie zastąpić te szablony ich poszczególnym zawartościom, a ta funkcja, która ją wykorzystywuje się do tego przypadku, jest o nazwie: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}. Tabelą szablonów indeksowania, to są one zdefiniowane przez: {{LinkPatrz|p.szablony_indeksowania}}, a jej zawartość: <syntaxhighlight lang="lua"> p.szablony_indeksowania={ ["Kotwica"] =true, ["Indeksuj"]=true, }; </syntaxhighlight> Są to szablony kotwic: {{s|Kotwica}}, który jest szablonem liniowym, a {{s|Indeksuj}}, natomiast to blokowy. === {{Śródtytuł|SzablonyWywolywaneOgolny}}{{Code|SzablonyWywolywaneOgolny}} === Funkcja rozwija nagłówek, wydzielając z niego zwykły tekst, nie dopełniając pewnych operacji. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonyWywolywaneOgolny(naglowek)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|naglowek}} {{Patrz|naglowek}} | _1 = Tekst nagłówka napisu wprowadzenia tekstu. }} Funkcja wykorzystuje funkcję: {{Code|{{sr|#p["WydzielZwykłyTekst"]|p=Specjalne}}}}, kod jej wywoływany jest z parametrami: <syntaxhighlight lang="lua"> local naglowek,Znaczniki,SzablonyStylowe,ZnakiSpecjalne=specjalne_modul["WydzielZwykłyTekst"]( { ---- tekst nagłówka; tekst=naglowek, ---- Nie wykorzystywuj w działaniu funkcji: Znaczniki, SzablonyStylowe, ZnakiSpecjalne; ["nagłówek"]=true, ---- Nie wykorzystuj dekodowania tekstu zakodowanego, bez rozwijania, ale wręcz przzeciwnie rozwijaj, pozostawiaj pewne szczególne kody przed rozkodowaniem; nieklasycznie=true, ---- Bazę kodowania weź z zewnątrz; kodowanie=false, ---- Wykorzystywana tablica kodowania tekstu modułu: Module:Szablonowe, zakodowanego z zewnątrz; ["tablica kodowania"]=tablica_analizy_obiektow_strony_dany_modul, },__FUNKCJA1,__FUNKCJA2); </syntaxhighlight> Ta funkcja wydziela zwykły tekst z nagłówka z szablonami zwykłymi i ramkami {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, bez naruszenia działania innych elementów szablonowych, jak tagi, czyli: {{s|#tag:}}, które też współdziałają też w kodzie danego nagłówka. Również i z linkami wewnętrznymi i zewnętrznymi, z których wydziela się zwykły tekst, bo wiadomo, że one nie mogą się znaleźć w linkach '''spisu treści''', bo nie może być link w linku w nim, a one niezależnie jakie, bo to ze względu na '''HTML''' nie możliwe technologicznie. Definicje dwóch kolejnych funkcji zdefiniowanych powyżej: <syntaxhighlight lang="lua"> ---- szablon - kod obiektu kodu w wikikodzie; ---- obiekt - typ obiektu kodu powyżej; ---- kod - numer tego samego typu obiektu; local __FUNKCJA1=function(szablon,obiekt,kod) ---- Funkcja wykorzystywana do ewentualnego modyfikowania użytych szablonów i przedstawianiu jego kodem symbolicznym, lub zastępowania pewnych szablonów nagłówków wartością pustą; local szablon,wynik=SzablonyWywolywane(szablon,obiekt,kod); return szablon,wynik; end; local __FUNKCJA2=function(szablon,obiekt,kod) --- rozwijaj uzyskany szablon, dalej, gdy napotkasz, jeśli zostanie włączone zmienna indeksowania w postaci wartości logicznej; return czy_indeksowanie; end; </syntaxhighlight> Funkcja zwraca wartości, tzn. zmienną z przetworzenia nagłówkowego, bez usuniętych znaczników, stylów i znaków specjalnych, tzn. części otoczone pewnymi cudzysłowami z taką samą liczbą, więc pogrubienia i pochylenia tekstu: <syntaxhighlight lang="lua"> return naglowek, Znaczniki, SzablonyStylowe, ZnakiSpecjalne; </syntaxhighlight> Definicje tych zwróconych funkcji, tzn.: {{Code|Znaczniki}} {{Patrz|Znaczniki}}, {{Code|SzablonyStylowe}} {{Patrz|SzablonyStylowe}} i {{Code|ZnakiSpecjalne}} {{Patrz|ZnakiSpecjalne}}, którego opisy raczej przedstawiają ich nazwy, dokładnie one są udokumentowane tutaj: <syntaxhighlight lang="lua"> ---- tekst - tekst do przetworzenia; local function Znaczniki(tekst,jakie,__FUNKCJA1,__FUNKCJA2) ---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML;---- jakie - nazwa lub wyrażenie regularne Lua w Scribunto nazwy ściśle określonego znacznika, a jeśli go nie podano, to usuwa dowolne znaczniki, jakie napotka, nawet znaczniki mechanizmu MediaWiki, nie tylko HTML; ---- funkcja do usuwania znaczników, tzn. w niej inne funkcje: __FUNKCJA1 - funkcja do zakodowywania tekstu przed usuwaniem znaczników, a __FUNKCJA2 - funkcja do odkodowania tego, co pozostało; tekst=p["UsuńZnaczniki"](tekst,jakie,__FUNKCJA1,__FUNKCJA2); return tekst; end; local function SzablonyStylowe(tekst) ---- funkcja do usuwania uruchomionych stylów, tzn. tych: <templatestyles src="..."/>, wtedy to staje się kodem parsera przetwarzanego za pomocą tekstu dla tego typu znacznika, kodami parsera mogą być też inne obiekty jak ramki Lua w Scribunto, ale nie muszą być takie, ale my rozważamy tutaj tylko jeden typ kodu parsera. tekst=p["UsuńSzablonyStylów"](tekst); return tekst; end; local function ZnakiSpecjalne(tekst) ---- funkcja do usuwania cudzysłowów w takich samych ilościach z prawej i z lewej strony danego fragmentu tekstu w nim; tekst=p["UsuńZnakiSpecjalne"](tekst); return tekst; end; </syntaxhighlight> Definicje tych funkcji znajdują się również w module: {{Code|{{ld2|Specjalne}}}}, które również przedstawiają inne funkcje do upraszczania tekstu, w tym nagłówka, ale nie tylko, bo dowolnego tekstu. === {{Śródtytuł|RefPrzypisowy}}{{Code|RefPrzypisowy}} === Mechanizm zamieniający kod referencji na jej wersję wyświetlaną na ekranie, czyli w nawiasie kwadratowym. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local RefPrzypisowy=function(obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt-ref}} | _1 = Nazwa typu przypisu, czyli jak bez nazwy, czy też jak: '''uwaga'''. | 2 = {{Code|kod}} {{Patrz|kod-ref}} | _2 = Numer danego typu przypisu. }} Gdy {{LinkPatrz|obiekt-ref}} nie ma nazwy, wtedy w nawiasie kwadratowym będzie tylko numerek {{LinkPatrz|kod-ref}}, a jeśli ma nazwę, to nazwa oddzielona spacją z prawej strony, a po nim jest ten numerek. === Dalsza część funkcji - Tom I === Tutaj opowiemy o części wstępnej tej funkcji. ==== Ustalanie zmiennej nazwy modułu aktualnej, czy bieżącej ==== Funkcja ustawia zmienną: {{Code|czy_kodowanie}} {{Patrz|czy_kodowanie}}, na podstawie istnienia zmiennych: {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} i {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. ==== Wyznaczanie nazwy modułu aktualnej, czy bieżącej, dla strony aktualnej, jeśli ona nie istnieje ==== Jeżeli zmienna {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} jest odpowiadającej wartości fdałszywej i mamy strona korzystaną, co określa parametr {{LinkPatrz|czy_artykul_korzystany}}, w postaci wartości prawdziwej, wtedy są liczone kolejne zmienne nazw na podstawie istnienia lub nieistnienia zmiennej {{Code|alternatywna}}, a jeśli ona jest prawdziwa, wtedy wybierane są zmienne z tą aktualną nazwą woluminu wynikłe z {{LinkZobaczTeż|strona_aktualna}}, przeciwnie z nazwą bieżącą woluminu,na podstawie tego, co wyświetla '''Stronicowy Parser''', te nazwy są ze sobą łączone, wtedy powstaje pełna nazwa strony, którą przyrównujemy do {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}}. Jeśli wartość {{LinkPatrz|czy_artykul_korzystany}} jest jednak fałszywa, w takim razie jest liczona {{LinkPatrz|nazwa_modulu_aktualna_czy_biezaca}} na podstawie wartości {{LinkPatrz|nazwa_strony}}. ==== Kodowanie '''HTML''' specjalnych znaków strony ==== Nazwę strony {{LinkPatrz|nazwa_strony}}, w której mogą występować specjalne znaki, które są niezrozumiałe z punktu widzenia '''HTML''', jeżeli np.z nich trzeba zbudować identyfikatory '''id''', a więc trzeba je zakodować, robimy to funkcją: {{Code|{{sr|#p.EncodeId|p=Html}}}}. ==== Zwracanie funkcji liczenia numeru nagłówka ==== Wyznaczamy funkcję: {{Code|HNumer}} {{Patrz|HNumer}}, która jest efektem zwrócenia przez: {{Code|{{sr|#p.LiczonyHNumer|p=StronicowyParser/Potrzebne}}}}. ==== Zamienianie szablonów nagłówków, czy nawet tych znaczników, na rozdziały równaniowe ==== Jeśli {{LinkPatrz|czy_kodowanie}} przyjmuje wartość prawdziwą, wtedy definiujemy funkcję: {{LinkŚródtytuł|SpecjalneWprowadzeniaTekstu}}. Dalej funkcja zamienia szablony: {{s|SpisTreści}} i {{s|HNumer}}, a także znaczniki: {{Tag|h1}}, {{Tag|h2}}, {{Tag|h3}}, {{Tag|h4}}, {{Tag|h5}} i {{Tag|h6}}, na ich wersję równaniową, aby dało się je rozpoznać jako rozdziały i było je łatwo wsadzić do szablonu takiego jak: {{s|Spis treści}} i inne podobne, za pomocą dwóch kolejnych funkcji wsadzonych do pewnej funkcji modułu {{m|Szablonowe}}, która służy do operacji na takich przypadkach. === Zmienna strony z nagłówkami === Gdy jest podana zmienna: {{Code|tylko_naglowek}} {{LinkPatrz|tylko_naglowek}}, ma wartość prawdziwą, wtedy zmienna: {{Code|nazwa_strony_z_naglowkami}} {{Patrz|nazwa_strony_z_naglowkami}}, przybiera wartość pustą, przeciwnie gdy zmienna {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}} jest ciągiem pusty, wtedy to samo, w innym pozostałym przypadku jest to dokładnie {{LinkPatrz|nazwa_strony}}, gdzie przed nim znajduje się dwukropek {{Code|:}}. === Dalsza część funkcji - Tom II === Tu powiemy coś o iteratorze, który po zebraniu danych zwraca zmienną {{Code|nil}}, co odpowiada dla pętli, jej przerwaniu. ==== Definicja iteratora zbierania informacji o stronie ==== Aby uruchomić pętle na rzeczywistych danych zakodowanej, czy nie, stronie, trzeba otrzymać zmienną pętli {{Code|iterator}} {{Patrz|iterator}} i go wywoływać bezparametrowo w każdym okrążeniu pętli, aby tak się stało, to trzeba uruchomić funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, na tekście {{LinkPatrz|tekst_artykulu}}, traktując tekst, jakby nie był taki zakodowany, bo tutaj jedynie się liczą elementy niezakodowane, czyli w tym przypadku nagłówki z tekstem rozdziału. ==== Zbieranie informacji o stronie w pętli generowanej przez iterator ==== Będziemy tutaj opisywali pętlę generowaną przez jego iterator {{LinkPatrz|iterator}}. W każdym okrązeniu pętli otrzymujemy dane: {{OpisParametrów | 1 = {{Code|naglowek_tab}} {{Patrz|naglowek_tab}} | _1 = Gdzie pierwszy jego element to {{Code|naglowek}} {{LinkPatrz|naglowek}}. | 2 = {{Code|text_rozdzialu}} {{Patrz|text_rozdzialu}} | _2 = Tekst rozdziału. | 3 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _3 = Poziom rozdziału. }} ===== Definicja nowe wartości zbierania uchwytów nagłówka w zmiennej numeracji ===== Deklaracja zmiennej {{Code|numeracja}} {{LinkPatrz|numeracja}} jest na zewnętrz pętli, w niej tworzymy jej nową wartość, którą jest tablica pusta. ==== Uzyskiwanie informacji z tekstu rozdziału nagłówka, i jego możliwych uchwytach, w poszczegolnym okrążeniu pętli, i zrzuceniu tam pojedynczego kodu problemu ==== Jeżeli {{ZobaczTeż|text_rozdzialu}} tekst strony jest zakodowany, to iterujemy po tekście {{LinkPatrz|text_rozdzialu}} w poszukiwaniu kodów bazy kodów zakodowanego tekstu, w tym celu wywołujemy pętlę: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}, wtedy uzyskujemy trzy obiekty w każdym przebiegu pętli, tzn. {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}, za pomocę tego uruchamiamy funkcję: {{LinkŚródtytuł|SzablonNaglowkujWTekscieRozdzialu}}. Jeżeli funkcja napotkała uchwyt szablonu: {{Code|{{s|Śródtytuł}}}}, wtedy jest zatrzymywana, w takim razie mamy informację o wystąpieniu niedozwolonego szablonu nagłówka w tekście. A jeżeli takiego szablonu tam nie ma, to układ iterator {{LinkPatrz|iterator}} iteruje aż do zakończenia danych. ==== Uzyskiwanie nagłówka i do niego identyfikatora '''id''' ==== ===== Tekst niezakodowany nagłówka ===== Gdy tekst nie jest zakodowany, wtedy zmienna: {{LinkPatrz|czy_kodowanie}}, ma wartość odpowiaadające fałszywej, wtedy dla tego nagłówka {{LinkPatrz|naglowek}} jest uruchamiana funkcja: {{Code|{{sr|#p.["PrzetwórzNagłówek"]|p=Specjalne}}}}, wtedy otrzymujemy dwie wartości: {{Code|nazwa_rozdzialu_w_artykule}} {{Patrz|nazwa_rozdzialu_w_artykule}} - zmienna idententyfikatora, {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna nagłówka. Te dwie zmienne zostały maksymalnie rozwinięte, zostały przystosowane do tego, aby słuzyły do tego, co trzego zostały stworzone. ===== Tekst zakodowany nagłówka ===== Gdy jednak {{LinkPatrz|czy_kodowanie}} przyjełajednak wartość fałszywą, wtedy jest uruchamiana funkcja: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}, z której otrzymujemy: {{Code|naglowek}} {{LinkPatrz|naglowek}} - zmienna przetworzonego i maksymalnie rozwiniętego nagłówka, oraz zmienne funkcje: {{LinkPatrz|Znaczniki}}, {{LinkPatrz|SzablonyStylowe}} i {{LinkPatrz|ZnakiSpecjalne}}. Na podstawie defiicji: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, mamy: {{Code|naglowek}} {{LinkPatrz|naglowek}}. ====== Kompletowanie nagłówka ====== Ten nagłówek kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, usuwając szablony indeksowania {{LinkPatrz|p.szablony_indeksowania}}, a także znaczniki: {{Tag|li}}, {{Tag|ul}} i {{Tag|ol}}. ====== Kompletowanie identyfikatora nagłówka ====== Kompletując: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, rozwijamy wszystko, oprócz atrybutów, {{Code|obiekt}} {{Code|{{=}}}} {{Code|ATRYBUTY}}, a na szablonach wywołujemy funkcję: {{LinkŚródtytuł|SzablonyWywolywaneOgolny}}. Na identyfikatorze nagłówka {{LinkPatrz|nazwa_rozdzialu_w_artykule}} Wywołujemy kolejno lokalne funkcje: {{LinkPatrz|SzablonyStylowe}} - do usuwania rozwiniętych kodów stylów, {{LinkPatrz|ZnakiSpecjalne}} - do usuwania cudzysłowów, i {{LinkPatrz|Znaczniki}} - do usuwania znaczzników. ====== Gdy w kodzie identyfikatora nie ma symbolicznych szablonów ====== W tym przypadku uruchamiamy fukcję do dekodowania znaków '''HTML''', tzn. dziesiętnych, szesnastkowych i literowych, funkcją: {{Code|{{sr|#p.DecodeKoduHTMLZnaku|p=Html}}}}, a później kodujemy specjalne znaki identyfikatora sposobem: {{Code|{{sr|#p.EncodeSpecjalneZnakiHtml|p=Html}}}}, przy pomocy kodów '''HTML''' dziesiętnych. ===== Usuwanie zbędnych znaków w identyfikatorze ===== Usuwane są potrójne i podwójne cudzysłowy {{Code|'}} oraz odstępy i dolne myślniki na końcach łańcucha, a wewnętrz jego kolejne je są zastępowane jedną spacją. ===== Referencje i wzory matematyczne ===== Referencje są zastępowane odpowiednio przy pomocy funkcji: {{LinkŚródtytuł|RefPrzypisowy}}, a wzory matematyczne, dla obiektów typu {{Code|POSTMATH}} {{Patrz|POSTMATH}}, które są zastępowane prawidłowo poprzez: {{LzLua|mw.text.encode}}, przy pomocy: {{Code|{{sr|#p.NormaKoduZakodowanegoHtmlTekstu|p=Szablonowe}}}}, obiektem: {{Code|postMath}} {{Patrz|postMath}} z ośmioma znakami cyferkami na końcu tego, którym jest {{Code|kod}} {{LinkPatrz|kod}}. ===== Wstępne przygotowanie identyfikatora do końcowego skutecznego użytku ===== Dla danego identyfikatora one mogą się powtarzać, a identyfikator musi być unikalny, zatem trzeba napisać ich dodatkowe numerki, po policzeniu otrzymamy {{Code|numer_tego_samego_naglowka}} {{Patrz|numer_tego_samego_naglowka}}. ====== Tablica identyfikatora i nagłówka ====== Funkcja wykorzystuje tablicę: {{Code|tablica_powtarzajacych_sie_elementow}} {{Patrz|tablica_powtarzajacych_sie_elementow}}, aby policzyć numer powtarzającego się identyfikatora '''id'''. Dla {{LinkPatrz|numer_tego_samego_naglowka}} równego {{Code|1}}, tworzemy tablicę {{Code|elementy_linku}} {{Patrz|elementy_linku}}, którego pierwszym elementem jest: {{LinkPatrz|nazwa_rozdzialu_w_artykule}}, a drugim nagłówek {{LinkPatrz|naglowek}}, a w przypadku tego numerku innego niż podana liczba, to dajemy do identyfikatora na końcu ten numerek po dolnym myślniku. ====== Uzupełnianie zmiennej do identyfikacji uchwytu z odpowiednim nagłówkiem ====== Jeśli: {{LinkPatrz|obiekty}} i {{LinkPatrz|numeracja}}, istnieją, wtedy do tej pierwszej tablicy dodawane są wszystkie elementy o takim samym typie z {{LinkPatrz|numeracja}}. To dodawanie na końcu tablicy przedstawia się: <syntaxhighlight lang="lua"> for _,value_numeracja in ipairs(numeracja)do obiekty[#obiekty+1]={value_numeracja,{nazwa_strony_z_naglowkami,elementy_linku[1], elementy_linku[2]}}; end; </syntaxhighlight> ====== Tworzenie tablicy nagłówkami i indetyfikatorami ====== Jeśli {{Code|poziom_rozdzialu}} jest większy od zera, tzn. {{Code|> 0}} {{ZobaczTeż|>0}}, wtedy liczymy numer rozdziału przy pomocy funkcji: {{Code|HNumer}} {{LinkPatrz|HNumer}} liczony z: {{Code|poziom_rozdzialu}} {{LinkPatrz|poziom_rozdzialu}}, tworząc w ten sposób wynik w postaci zmiennej {{Code|numer_rozdzialu_ustalony}} {{Patrz|numer_rozdzialu_ustalony}}. {{HNumer|1= ======= Rozdziały ewentualnie powtarzające się ======= }} Na sam koniec tablicy: {{Code|tablica_powtarzajacych_sie_elementow}} {{LinkPatrz|tablica_powtarzajacych_sie_elementow}}, dodajemy element identyfikatora '''id''' bez numerka, tzn.: {{Code|nazwa_rozdzialu_w_artykule}} {{LinkPatrz|nazwa_rozdzialu_w_artykule}}. {{HNumer|1= ======= Tablica spisu treści ======= }} Jest tworzona tablica spisu: {{Code|tablica_spisu_tresci}} {{Patrz|tablica_spisu_tresci}}, jako pusta tablica, z później dodanym elementem o kluczu: {{Code|nazwa_strony}} {{Patrz|tablica_spisu_tresci.nazwa_strony}}, którym jest o wartości: {{LinkPatrz|nazwa_strony_z_naglowkami}}. Do tablicy: {{LinkPatrz|tablica_spisu_tresci}}, dodawane są elementy według schematu: <syntaxhighlight lang="lua"> tablica_spisu_tresci[#tablica_spisu_tresci+1]={elementy_linku,numer_rozdzialu_ustalony}; </syntaxhighlight> === Dalsza część funkcji - Tom III === Będziemy się tutaj zajmowali z tekstem przed pierwszym rozdziałem na stronie. ==== Nagłówek na samym początku strony ==== Gdy kodowanie jest jednak włączone, tzn.: {{LinkPatrz|czy_kodowanie}}, jest prawdziwe, i mamy artykuł korzystany, tzn.: {{LinkPatrz|czy_artykul_korzystany}}, i zaprzeczenie wyłowania funkcji: {{LinkPatrz|CzyJestTakiProblemJakoElementTablicy}}, przyjmuje wartość prawdziwą, to jeśli na samym początku znajduje się rozdział, wtedy funkcja zwraca wynik: {{LinkPatrz|tablica_spisu_tresci}}. ==== Tekst przed pierwszym rozdziałem ==== Wyznaczamy ten tekst, który będzie ukrywał się pod zmienną: {{Code|tekst_zerowy}} {{Patrz|tekst_zerowy}}, który jest tekstem przed pierwszym rozdziałem lub samym tekstem zakodowanego wikikodu {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}}. ===== Szablony nagłówka w tekście zerowym ===== W tym tekście iterujemy jak w punkcie: {{LinkZobaczTeż|text_rozdzialu}}, tylko zamiast {{LinkPatrz|text_rozdzialu}} jest {{LinkPatrz|tekst_zerowy}}. === Dalsza część funkcji - Tom IV === Zwracaną wartością tej funkcji jest: {{Code|tablica_spisu_tresci}} {{LinkPatrz|tablica_spisu_tresci}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ew7tzlk8bxvmfb7opii2pnbf4in0pga Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom I 4 63522 558220 554481 2026-10-01T19:30:59Z Persino 2851 558220 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Pełna nazwa strony, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkŚródtytuł|RozwijanieNazwy}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według fukcji: {{LinkŚródtytuł|RozwijanieNazwy}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - ten tekst tytułu rozdziału, o którym mówimy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa spisu treści, potrzebna do rozwijania adresów względnych, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica bazy modułu {{Code|{{ld2|Szablonowe}}}}, która zawiera informacje na temat zakodowanego tekstu, calego artykułu, w tym również tych napisów, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica rozłożeń elementów składowych bazy szabonów i znaczników, i ewentualnie innych, elementów zbazowanego tekstu. ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany, * {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} - jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qmabt2s9rk6wlo47rdrja4yieb51ver 558221 558220 2026-10-01T19:35:57Z Persino 2851 /* Obiekty typu {{nobold|{{Code|SZABLON}}}} */ 558221 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Pełna nazwa strony, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkŚródtytuł|RozwijanieNazwy}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według fukcji: {{LinkŚródtytuł|RozwijanieNazwy}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - ten tekst tytułu rozdziału, o którym mówimy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa spisu treści, potrzebna do rozwijania adresów względnych, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica bazy modułu {{Code|{{ld2|Szablonowe}}}}, która zawiera informacje na temat zakodowanego tekstu, calego artykułu, w tym również tych napisów, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica rozłożeń elementów składowych bazy szabonów i znaczników, i ewentualnie innych, elementów zbazowanego tekstu. ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany, * {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} - jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> n6tl8pj7h08q17l30m43pq9fy4g1pex 558222 558221 2026-10-01T19:37:55Z Persino 2851 558222 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Pełna nazwa strony, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkŚródtytuł|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według fukcji: {{LinkŚródtytuł|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - ten tekst tytułu rozdziału, o którym mówimy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa spisu treści, potrzebna do rozwijania adresów względnych, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica bazy modułu {{Code|{{ld2|Szablonowe}}}}, która zawiera informacje na temat zakodowanego tekstu, calego artykułu, w tym również tych napisów, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica rozłożeń elementów składowych bazy szabonów i znaczników, i ewentualnie innych, elementów zbazowanego tekstu. ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany, * {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} - jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4t2w9jrl6ww76zr5o0o0vynrmzrx1dr 558223 558222 2026-10-01T19:41:55Z Persino 2851 558223 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Pełna nazwa strony, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} - ten tekst tytułu rozdziału, o którym mówimy, * {{Code|pelna_nazwa_spisu_tresci_szablonowa}} - pełna nazwa spisu treści, potrzebna do rozwijania adresów względnych, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica bazy modułu {{Code|{{ld2|Szablonowe}}}}, która zawiera informacje na temat zakodowanego tekstu, calego artykułu, w tym również tych napisów, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica rozłożeń elementów składowych bazy szabonów i znaczników, i ewentualnie innych, elementów zbazowanego tekstu. ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany, * {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} - jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pbbdt07uqgdmk3kcpgf51gqgbdsiry8 558224 558223 2026-10-01T19:48:21Z Persino 2851 /* {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} */ 558224 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Pełna nazwa strony, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany, * {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} - jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2eaw9vogaj4ke3378c1fg6m174bzf9d 558225 558224 2026-10-01T19:50:56Z Persino 2851 /* Opis pobieżny funkcji */ 558225 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} - jak w: {{LinkPatrz|self}}, * {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} - kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}, * {{Code|nazwa_spisu_tresci}} - jak w: {{LinkPatrz|nazwa_spisu_tresci}}, * {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} - czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany, * {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} - jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki, * {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} - jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> lcmxk062s0jzbluxqyty7dzvronckjv 558226 558225 2026-10-01T19:57:19Z Persino 2851 /* Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} */ 558226 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jvyd7374gxr4ksg9jv2f8pdc7ag8sia 558227 558226 2026-10-01T19:59:05Z Persino 2851 /* {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} */ 558227 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}, * {{Code|obiekt}} - jak w: {{LinkPatrz|obiekt}}, * {{Code|kod}} - jak w: {{LinkPatrz|kod}}. ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jeednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policznych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}}- jak w: {{LinkPatrz|szablon}}. ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gmptz288qckkzzdp7jvqys5bsxcdjb6 558228 558227 2026-10-01T20:02:30Z Persino 2851 /* {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} */ 558228 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: * {{Code|przedrostek_listy}} - przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą, * {{Code|tekstowy_przedrostek}} - numeracja pozycji w liście lub w nagłówku dodatnim, * {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} - jest to rozdział bez nueracji i przedrostka pozycji listy, * {{Code|true/false}} - wartość {{Code|true}} świardczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> d6oix92xhtllvf9d9p4lf4wf3i2fk2x 558229 558228 2026-10-01T20:05:09Z Persino 2851 /* {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} */ 558229 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdzziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} {{Patrz|linia}} - pojedyncza przetworzona linia. ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - jak w: {{LinkPatrz|szablon}}. ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kopletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinię, który można iterrować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mavu5r1zvu6v0venu14zqg7tjl56pnk 558230 558229 2026-10-01T20:07:41Z Persino 2851 /* {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} */ 558230 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: * {{Code|linia}} - jak w: {{LinkPatrz|linia}}, * {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} - czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. Parametry zwracanej funkcji przez tę w nagłówku: * {{Code|tabela_rozdzial_artykulow2}} - jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, * {{Code|numer_podtablicy_w_tablicy}} - jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, * {{Code|tab_stare}} - jaka w: {{LinkPatrz|tab_stare}}. ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów funkcji. Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}} to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. {{Code|przedrostek_listy}} to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 3158purm470cl5s16pk1cfi3vzsbhoa 558231 558230 2026-10-01T20:11:38Z Persino 2851 /* {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} */ 558231 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ntphnmxb44zh3b3t1mdmkxmlf9syv4a 558232 558231 2026-10-01T20:13:08Z Persino 2851 /* {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} */ 558232 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: * Brak parametrów. ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4r36wt62xlif9l7l2q8dvope3wt1r4x 558233 558232 2026-10-01T20:14:31Z Persino 2851 /* {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} */ 558233 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: * {{Code|rozdzial}} {{Patrz|rozdzial}} - jest to tekst rozdziału, * {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} - jest to linia z rozdziałem, * {{Code|text}} {{Patrz|text}} - jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu, * {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} - jest to poziom danego rozdziału, * {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} - początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}, * {{Code|numeracja}} {{Patrz|numeracja}} - numeracja rozdziału, * {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} - czy dany rozdział jest centrowany. ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} - czy jesteśmy w spisie treści, * {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} - zmienna mówiąca, że teraz jesteśmy poza spisem treści. ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: * {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} - tabela składająca się z dwóch elementów: ** {{Code|rozdzial}} - jak w: {{LinkPatrz|rozdzial}}, ** {{Code|linia_rozdzialu}} - jak w: {{LinkPatrz|linia_rozdzialu}}, * {{Code|text}} - jak w: {{LinkPatrz|text}}, * {{Code|poziom_rozdzialu}} - jak w: {{LinkPatrz|poziom_rozdzialu}}, * {{Code|poczatek_rozdzialu}} - jak w: {{LinkPatrz|poczatek_rozdzialu}}, * {{Code|numeracja}} - jak w: {{LinkPatrz|numeracja}}, * {{Code|czy_rozdzial_centrowany}} - jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> igf97wwt5hfo38s6fguiub455ct823r 558234 558233 2026-10-01T20:24:47Z Persino 2851 /* Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} */ 558234 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: * {{Code|iterator}} {{Patrz|iterator-IterTekst}} - iterator po rozdziałach i jego zawartościach, * {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} - tekst przteworzony rozdziału. Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> khrkgv2ril1ba7k667ynwmyssa7e84c 558235 558234 2026-10-01T20:27:41Z Persino 2851 /* Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} */ 558235 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: * {{Code|numer_rodzaju_artykulu}} - numer podtabeli elementtu, do którego wsadzamy element, * {{Code|tabela_rozdzial_artykulow2}} - tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> blpqipvvpxnv1w0q9ouu8edzgeu6d1h 558248 558235 2026-10-01T21:11:46Z Persino 2851 /* {{Śródtytuł|Ile}}{{Code|Ile}} */ 558248 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis funkcji: * {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} - jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, * {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} - pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, * {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} - tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłókiem, a gdy niema tego bez, to wtedy dzięki tej funkcjinumeracja tak się zachowuje, jaak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> twc9v3hkfgzncoeraw0ubntto3g6zzw 558249 558248 2026-10-01T21:19:44Z Persino 2851 /* Opis pobieżny funkcji */ 558249 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis tych parametrów funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} | _1 = Jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, | 2 = {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} | _2 = Pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 3 = {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} | _3 = Tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłówkiem, a gdy niema tego bez, to wtedy dzięki tej funkcji numeracja tak się zachowuje, jak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. }} Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jezeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może byc to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1koe4d3oidj7w0m57dxybutu6wo48hv 558250 558249 2026-10-01T21:30:10Z Persino 2851 /* Iterator linii artykułu spis treści */ 558250 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis tych parametrów funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} | _1 = Jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, | 2 = {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} | _2 = Pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 3 = {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} | _3 = Tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłówkiem, a gdy niema tego bez, to wtedy dzięki tej funkcji numeracja tak się zachowuje, jak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. }} Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawwdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jeżeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może być to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ihkwls9yarwz3f30hv6ciquhk7wpsac 558251 558250 2026-10-01T21:58:28Z Persino 2851 /* {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} */ 558251 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis tych parametrów funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} | _1 = Jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, | 2 = {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} | _2 = Pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 3 = {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} | _3 = Tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłówkiem, a gdy niema tego bez, to wtedy dzięki tej funkcji numeracja tak się zachowuje, jak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. }} Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> Tzn., czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Fubkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w {{LinkPatrz|tab_stare}}, czy istnieje element {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}} i dalszy {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}} taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej {{LinkPatrz|tab_stare}} jest ustawiany element {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy {{Code|ile>0}} lub funkcja {{LinkŚródtytuł|CzyZaliczac}} przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej {{LinkPatrz|nowa_linia}} przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn. {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}} tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}} liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w {{LinkPatrz|tabela_artykulow}} dla miejsca {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A {{Code|przedrostek_listy}}, to znaki poczatkowe z listy {{LinkPatrz|wzor_do_linii_z_lista}}, a {{Code|tekstowy_przedrostek}} to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a {{Code|linia}} {{LinkPatrz|linia}} to wyzyskana linia bez początku pozycji listy. Ustawiamy {{LinkPatrz|tab_stare[2][4]}} na wartość {{Code|true}} i element {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}} ustawiamy na zero. Tworzmy tablicę pustą na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} tablicy {{LinkPatrz|tabela_rozdzial_artykulow}} i do tej tablicy dodajemy {{LinkPatrz|tab_stare}} za pomocą funkcji {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli {{LinkPatrz|tabela_artykulow}}, to na pozycję {{LinkPatrz|numer_podtablicy_w_tablicy}} jest dodawany element {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jeżeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może być to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1bq91j8qbivsrmbmkk6umudb6j10u3h 558252 558251 2026-10-01T22:15:32Z Persino 2851 /* Dalszy opis funkcji */ 558252 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis tych parametrów funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} | _1 = Jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, | 2 = {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} | _2 = Pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 3 = {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} | _3 = Tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłówkiem, a gdy niema tego bez, to wtedy dzięki tej funkcji numeracja tak się zachowuje, jak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. }} Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}} jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany zoistał poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}} jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry fubkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżżeli, któreś z parametrów z {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}} lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}} jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn. {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej ksiązki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}} przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównaywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez defininiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}} z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}} z {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}} dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}} z drugiego elementu tablicy {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy {{Code|tab_stare}} i wsadzanie jej do tablicy ogólnej {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{Patrz|szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}} lub {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}} i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość {{Code|obiekt}} jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej {{Code|szablon}} są wykorzystanne funkcje z modułu {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Fubkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> Tzn., czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, nna podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu {{LinkPatrz|obiekt}} równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Funkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, czy istnieje element: {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}}, i dalszy: {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}}, taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, jest ustawiany element: {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna: {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}, zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycję: {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy: {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy: {{Code|ile>0}}, lub funkcja: {{LinkŚródtytuł|CzyZaliczac}}, przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej: {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}}, przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn.: {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej: {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, dla miejsca: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A: {{Code|przedrostek_listy}}, to znaki poczatkowe z listy: {{Code|wzor_do_linii_z_lista}} {{LinkPatrz|wzor_do_linii_z_lista}}, a: {{Code|tekstowy_przedrostek}}, to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a: {{Code|linia}} {{LinkPatrz|linia}}, to wyzyskana linia bez początku pozycji listy. Ustawiamy: {{Code|tab_stare[2][4]}} {{LinkPatrz|tab_stare[2][4]}}, na wartość {{Code|true}} i element: {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}}, ustawiamy na zero. Tworzymy tablicę pustą na pozycję: {{LinkPatrz|numer_podtablicy_w_tablicy}}, tablicy: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, i do tej tablicy dodajemy: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, za pomocą funkcji: {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, to na pozycję: {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, jest dodawany element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy: {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}} przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji {{LinkŚródtytuł|LiniaArtykulow}} linia {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}} jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od {{Code|k {{=}} 1}} do {{Code|k {{=}} #tab_linia}} gdzie {{Code|#tab_linia}} {{Patrz|#tab_linia}} jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii {{LinkPatrz|tab_linia[k]}} przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy {{LinkPatrz|iterator2}} uzyskując w każdej iteracji {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia {{Code|SZABLON}} lub {{Code|LINKW}} albo {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} dla elementu {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element {{Code|tabela_spisu}} istnieje, element pierwszy {{Code|tabela_spisu[1]}} jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element {{Code|tabela_spisu["numer_link"]}} istnieje i jest równy {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po {{LinkPatrz|obiekt}}, póżniej po {{LinkPatrz|kod}}, którą nazwiemy {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A {{Code|tekstowy_przedrostek}} liczmy uzyskując parametr o kluczu {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze {{Code|1}} i {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną {{LinkPatrz|przerwij}} na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}} i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, i rozwijamy funkcją: {{LzLua|frame:preprocess}}. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}} i iteratora {{Code|iterator}} {{Patrz|iterator}} po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}} o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu {{Code|Spis treści}}, czy {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}} na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}} i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}} na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}} przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}} lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jeżeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może być to link normalny {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> lu5ik4d1wnu00lcu33v5bu1qdmtzqnz 558253 558252 2026-10-01T22:49:23Z Persino 2851 558253 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis tych parametrów funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} | _1 = Jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, | 2 = {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} | _2 = Pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 3 = {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} | _3 = Tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłówkiem, a gdy niema tego bez, to wtedy dzięki tej funkcji numeracja tak się zachowuje, jak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. }} Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to: {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to: {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to: {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany został poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem: {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}}, jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie: {{Code|tab_artykul}} {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżeli, któreś z parametrów z: {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem: {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest: {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy: {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}}, lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica{{dk}} {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}}, nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone: {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element{{dk}} {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}}, jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn.: {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej książki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w: {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}, jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez definiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli: {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej: {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną: {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}}, z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element: {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}}, z: {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną: {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}}, z drugiego elementu tablicy: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną: {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy: {{Code|tab_stare}}, i wsadzanie jej do tablicy ogólnej: {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym: {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu: {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla: {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica: {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{LinkPatrz|P.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser: {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą: {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}}, lub: {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody {{Strong|HTML}}, co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}}, i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość: {{Code|obiekt}}, jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej: {{Code|szablon}}, są wykorzystanne funkcje z modułu: {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji: {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Funkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> Tzn., czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, na podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu: {{Code|obiekt}} {{LinkPatrz|obiekt}}, równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody {{Strong|HTML}} przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Funkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, czy istnieje element: {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}}, i dalszy: {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}}, taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, jest ustawiany element: {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna: {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}, zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycję: {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy: {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy: {{Code|ile>0}}, lub funkcja: {{LinkŚródtytuł|CzyZaliczac}}, przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej: {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}}, przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn.: {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej: {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, dla miejsca: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A: {{Code|przedrostek_listy}}, to znaki poczatkowe z listy: {{Code|wzor_do_linii_z_lista}} {{LinkPatrz|wzor_do_linii_z_lista}}, a: {{Code|tekstowy_przedrostek}}, to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a: {{Code|linia}} {{LinkPatrz|linia}}, to wyzyskana linia bez początku pozycji listy. Ustawiamy: {{Code|tab_stare[2][4]}} {{LinkPatrz|tab_stare[2][4]}}, na wartość {{Code|true}} i element: {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}}, ustawiamy na zero. Tworzymy tablicę pustą na pozycję: {{LinkPatrz|numer_podtablicy_w_tablicy}}, tablicy: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, i do tej tablicy dodajemy: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, za pomocą funkcji: {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, to na pozycję: {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, jest dodawany element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy: {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}, przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji: {{LinkŚródtytuł|LiniaArtykulow}}, linia: {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}}, jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od: {{Code|k {{=}} 1}}, do: {{Code|k {{=}} #tab_linia}}, gdzie: {{Code|#tab_linia}} {{Patrz|#tab_linia}}, jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy: {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii: {{Code|tab_linia[k]}} {{LinkPatrz|tab_linia[k]}}, przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem: {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną: {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy: {{LinkPatrz|iterator2}}, uzyskując w każdej iteracji: {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia: {{Code|SZABLON}}, lub: {{Code|LINKW}}, albo: {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, dla elementu: {{Code|nazwa_szablonu}} {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element: {{Code|tabela_spisu}}, istnieje, element pierwszy: {{Code|tabela_spisu[1]}}, jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element: {{Code|tabela_spisu["numer_link"]}}, istnieje i jest równy: {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po: {{Code|obiekt}} {{LinkPatrz|obiekt}}, póżniej po: {{Code|kod}}, {{LinkPatrz|kod}}, którą nazwiemy: {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla: {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy: {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A: {{Code|tekstowy_przedrostek}}, liczmy uzyskując parametr o kluczu: {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze: {{Code|1}}, i {{Code|szablon}} {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną: {{Code|}} {{LinkPatrz|przerwij}}, na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej: {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}}, i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.DekodowanieTekstuDekodowanieTekstu|p=StronicowyParser/Potrzebne}}}}, poprzez zwracaną przez nią funkcję, w której jest wykorzystywana funkcją: {{LzLua|frame:preprocess}}, do rozwijania. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy: {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie: {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję: {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu: {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}}, i iteratora: {{Code|iterator}} {{Patrz|iterator}}, po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej: {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością: {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu: {{Code|Spis treści}}, czy: {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej: {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}}, i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar: {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}}, na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna: {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}}, lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jeżeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może być to link normalny: {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii: {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> k5wubl8mr74mdj9uedwn3u8nr7jw5qr 558266 558253 2026-10-01T23:59:23Z Persino 2851 558266 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}} == Funkcje lokalne == === {{Śródtytuł|Ile}}{{Code|Ile}} === Funkcja liczy liczbę elementów we wszystkich podtabelach tabeli {{Code|tabela_rozdzial_artykulow2}} {{Patrz|tabela_rozdzial_artykulow2}}, licząc od drugiej tabeli, po pierwszej tabeli mieści się podtabela z informacjami o rozdziale, w której znajdują się artykuły określone dalszymi podtabelami. Tymi podtabelami są od {{Code|2}} do {{Code|7}}, czyli {{Code|6}} tabelek, w których są artykuły, które zaliczamy do kategorii wliczane, tzn. one nie znajdują się w takich rozdziałach przetłumaczonych na małą literę, ale przedtem na nią była działana funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, usuwając z nich odstępy na końcach, w tym dolne myślniki, a wewnątrz zamieniając kolejne dolne myślniki i spacje na jedną spacją. Metafunkcja, w metatablicy: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, w: {{Code|{{ld2|Parametry}}}}, aby porównać to z tablicą {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}}, by zaliczyć je do tego typu: <syntaxhighlight lang="lua"> p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu={ ["licencja"]=true, ["inne"]=true, ["bibliografia"]=true, ["zobacz też"]=true, ["linki zewnętrzne"]=true, }; </syntaxhighlight> Twew rozdziały należą do kategorii rozdziałów, w których artykuły są pomijane przez: '''{{ld|StronicowyParser|Stronicowy parser}}''', ale jeżeli one należą do rozdziału spisu treści lub rzeczy, to tam jednak nie są takie, inaczej jest poza. A od {{Code|7}} do {{Code|13}} znajdują się podtabele z artykułami, które już należą już tam, czyli też drugie {{Code|6}}. A ta powyższa tabela mieści się: {{Code|{{ld2|StronicowyParser/obiekty}}}}, a jego opis w: {{Code|{{sr|#p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu|p=StronicowyParser/obiekty}}}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu}} | _1 = Numer podtabeli elementtu, do którego wsadzamy element. | 2 = {{Code|tabela_rozdzial_artykulow2}} | _2 = Tabela wraz podtabelami, od {{Code|1}} do {{Code|13}}, ale liczenie jest od {{Code|2}}. }} === {{Śródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}{{Code|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}} === ==== Opis pobieżny funkcji ==== Funkcja do wstawiania elementów z ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, za pomocą funkcji wstawianej jako parametr: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{Patrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, do odpowiedniej pozycji artykularnej od: {{Code|2}} do {{Code|13}}, a pozycja {{Code|1}}, to pozycja rozdziałowa, ona jest określana przez zmienną: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, a pozycja, którą wsadzamy to: {{Code|tab_stare}} {{Patrz|tab_stare}}. Funkcja zwraca pozycje: <syntaxhighlight lang="lua"> return numer_rodzaju_artykulu_poprz,tab_pozycja_elementow_w_spisie_rzeczy,tablica_artykulow_zebranych; </syntaxhighlight> Opis tych parametrów funkcji: {{OpisParametrów | 1 = {{Code|numer_rodzaju_artykulu_poprz}} {{Patrz|numer_rodzaju_artykulu_poprz}} | _1 = Jest to wartość zwrócona przez funkcję: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}} {{Patrz|AnalizujLinkSzablonyOrazLinki}}, w odróżnieniu od: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, jest mniejszy o jeden, czyli wtedy to była a poziomie przypisywania wartość {{Code|numer_rodzaju_artykulu}} {{Patrz|numer_rodzaju_artykulu}}, | 2 = {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{Patrz|tab_pozycja_elementow_w_spisie_rzeczy}} | _2 = Pierwsza artykularna zmienna zwrócona przez funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 3 = {{Code|tablica_artykulow_zebranych}} {{Patrz|tablica_artykulow_zebranych}} | _3 = Tablica do sprawdzania, czy artykuł z nagłówkiem, ma powtórzenie tego bez nagłówka, czyli dla tego bez tego jest inna numeracja niż z nagłówkiem, a gdy niema tego bez, to wtedy dzięki tej funkcji numeracja tak się zachowuje, jak tam by był ten element, co prawda jest tam dodawany, ale jako z informacją taką, że bz numeru ustalanym przez funkcję: {{LinkŚródtytuł|Ile}}, A przy okazji, aby tego elementu nie dodawać ponownie, to w nim jest ustalana druga zmienna na {{Code|1}}, a wcześniej była na {{Code|0}}, i dlatego ona była wtedy dodawana, a później już tak nie jest. }} Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WstawianieElementowychZarejestrowanychStronDoBazyWoluminu(self,__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY,tabela_rozdzial_artykulow2,tablica_artykulow_zebranych,wliczaj_artykuly_tego_rozdzialu,szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,--[[]]przedrostek_listy,tekstowy_przedrostek,w_rozdziale,linia_artykokow--[[]])...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji, z pominięciem, której funkcję można napisać zamiast {{Code|p.}} {{Patrz|p.}} jako {{Code|p:}} {{Patrz|p:}}. | 2 = {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} | _2 = Opis jest jak w: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. | 3 = {{Code|tabela_rozdzial_artykulow2}} | _3 = Ta tabela działa według opisu jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 4 = {{Code|tablica_artykulow_zebranych}} | _4 = Diała jak w: {{LinkPatrz|tablica_artykulow_zebranych}}. | 5 = {{Code|wliczaj_artykuly_tego_rozdzialu}} {{Patrz|wliczaj_artykuly_tego_rozdzialu}} | _5 = Jak przybiera odpowiadającą wartość fałszywą, to do: {{LinkPatrz|numer_rodzaju_artykulu}}, dodawane jest {{Code|6}}. | 6 = {{Code|szablon}} {{Patrz|szablon}} | _6 = Jest to tekst zakodowany całego linku wewnętrznego, czy zewnętrznego, czy linku inteligentnego w postaci szablonu. | 7 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} - | _7 = Kolejno to jest: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 8 = {{Code|nazwa_spisu_tresci}} {{Patrz|nazwa_spisu_tresci}} | _8 = Jest to nazwa artykułu danego spisu treści. | 9 = {{Code|pelna_nazwa_spisu_tresci}} {{Patrz|pelna_nazwa_spisu_tresci}} | _9 = Uchwyt do bazy kodowania tekstu strony spisu treści. | 10 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} {{Patrz|pelna_nazwa_spisu_tresci_szablonowa}} | _10 = Nazwa strony szablonowa, jak są wywoływane w postaci szablonowej, gdzie są rozwijane adresy względne stron, poczytaj: {{lr2|Moduły/StronicowyParser/Rozdziały}} {{Patrz|Moduły/StronicowyParser/Rozdziały}}. | 11 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _11 = Uchwyt do tablicy bazy kodowania zapisany w samej bazie dla danego artykułu, używany zamiast:{{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 12 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _12 = Tablica bazy zapisana w postaci osobnej tablicy, a nie jej w wewnętrznej bazie, nie jak to było w postaci zmiennej {{LinkPatrz|nazwa_modulu}}, używana zamiast: {{LinkPatrz|nazwa_modulu}}. | 13 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}} | _13 = Tablica rozłożeń zmiennej {{Code|szablon}}, dla zmiennych szablonowych, i dla funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}. | 14 = {{Code|obiekt}} {{Patrz|obiekt}} i {{Code|kod}} {{Patrz|kod}} | _14 = Obiekt i kod, czyli: zmienne charakteryzujące zmienną wnętrza: {{Code|szablon}} {{LinkPatrz|szablon}}. | 15 = {{Code|tab_nazwa_spisow_przekierowaniowych}} {{Patrz|tab_nazwa_spisow_przekierowaniowych}} | _15 = Tablica przekierować, aby nie rozpatrywać tego samego przekierowania wiele razy. | 16 = {{Code|przedrostek_listy}} {{Patrz|przedrostek_listy}} | _16 = Tekstowy przedrostek listy z przedziału znaków: {{Code|<nowiki>[;%*:#]+</nowiki>}} {{Patrz|wzor_do_linii_z_lista}}, rozpoczynających pojedyncza linię. | 17 = {{Code|tekstowy_przedrostek}} {{Patrz|tekstowy_przedrostek}} | _17 = Numeracja rozdziału, z jakim rozpoczyna się rozdział. | 18 = {{Code|w_rozdziale}} {{Patrz|w_rozdziale}}} | _18 = Gdy link znajduje się w rozdziale dodatnim. | 19 = {{Code|linia_artykokow}} {{Patrz|linia_artykokow}} | _19 = Cała linia z artykułem lub artykułami, tą linią równie dobrze może być rozdział, tu chodzi o rozdział dodatni. }} ==== Opis pobieżny funkcji {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Przedstawiamy tutaj funkcję: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, która jest opisana w punnkcie: {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Definicja funkcji w nagłówku: <syntaxhighlight lang="lua"> __FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY(tabela_rozdzial_artykulow2,numer_rodzaju_artykulow_w_nie_podreczniku,tab_stare); </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}, | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} Ta funkcja została opisana już wcześniej. ==== Szczegółowy opis funkcji głównej ==== Uruchamiamy funkcję {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, która jest zdefiniowana w module: {{Code|{{sr|#p.AnalizujLinkSzablonyOrazLinki|p=StronicowyParser/Potrzebne}}}}. Wywołujemy tę funkcję: <syntaxhighlight lang="lua"> local tab_pozycja_elementow_w_spisie_rzeczy,numer_rodzaju_artykulu,id,parametry_szablonu,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,nil,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych); </syntaxhighlight> Pierwszy elementem: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest to zmienna tablicowa, która opisuje parametry artykularno-linkowe parametry, drugi: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, do której kategorii należy dany artykuł w linku, a trzeci parametr, to: {{Code|id}} {{Patrz|id}}, to zbierane są parametry linkowe z szablonu {{s|SpisTreści}}, czwarty to: {{Code|parametry_szablonu}} {{Patrz|parametry_szablonu}}, w przypadku szablonów inteligentnych linków, to są parametry wywołań tych szablonów, ostatni parametr to: {{Code|kom}} {{Patrz|kom}}, przedstawia on, jeśli {{Code|false}}, to artykuł zakwalifikowany został poprawnie do rozważań, a {{Code|true}} już nie. To {{LinkPatrz|parametry szablonu}}, to jest tablica z trzech elementów, tzn.: <syntaxhighlight lang="lua"> local parametry szablonu={tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,}; </syntaxhighlight> Elementy tablicy: {{OpisParametrów | 1 = {{Code|tabela_parametrow_szablonu}} {{Patrz|tabela_parametrow_szablonu}} | _1 = Tablica parametrów uzyskanych z argumentów, i ich wartości, nazwanych i nienazwanych. | 2 = {{Code|nazwa_szablonu}} {{Patrz|nazwa_szablonu}} | _2 = To jest nazwa uzyskanego szablonu linków inteligentnych lub nie. | 3 = {{Code|tabela_modyfikatorow}} {{Patrz|tabela_modyfikatorow}} | _3 = Tabela modyfikatorów rozkładanego szablonu. }} Jeśli parametr: {{Code|numer_rodzaju_artykulu}} {{LinkPatrz|numer_rodzaju_artykulu}}, istnieje, to tworzona jest z niego taka sama wersja lub przy nieistnnieniu parametru {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, do niego jest dodawana jest liczba {{Code|6}}. W ten sposób możemy zbierać artykuły książki i inne,ktore należą do pewnych rozdziałów i które nie należą. ===== {{Śródtytuł|ParametrPierwszy}}{{Code|ParametrPierwszy}} ===== Funkcja zbierające dane z {{Code|tab_artykul}} {{Patrz|tab_artykul}}, którego to jest czteroelementowa tablica, dotycząca danego artykułu. Drugim parametrem: {{Code|czy_niedozwolone}} {{Patrz|czy_niedozwolone}}, jest zmienna logiczna mówiąca, czy wskazać w nazwie artykułu, czy są dozwolone znaki, jest to sprawdzenie według wyrażenia regularnego: {{Code|<nowiki>[|<>{}%[%]]</nowiki>}} {{Patrz|wzor_znaki_niedozwolone}} na podstawie funkcji {{LzLua|mw.ustring.match}}, czyli: {{Code|znaki_niedozwolone}} {{Patrz|znaki_niedozwolone}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> ParametrPierwszy(tab_artykul,czy_niedozwolone)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tab_artykul}} | _1 = Jak w: {{LinkPatrz|tab_artykul}}. | 2 = {{Code|czy_niedozwolone}} | _2 = Jak w: {{LinkPatrz|czy_niedozwolone}}. }} Gdzie: {{Code|tab_artykul}} {{LinkPatrz|tab_artykul}}, który jest pierwszym parametrem przyjmowanym przez funkcję, jest zdefiniowany jako czteroelementowa tablica, którą przypisujemy do czterem osobnych parametrów: <syntaxhighlight lang="lua"> local artykul=tab_artykul[1]; local parametry=tab_artykul[2]; local naglowek=tab_artykul[3]; local tablica_przekierowania=tab_artykul[4]; </syntaxhighlight> Jeżeli, któreś z parametrów z: {{LinkPatrz|tab_artykul}}, tzn. element jego {{Code|2}}-gi i {{Code|3}}-ci, istnieje, to układana jest trzyelementowa tablica z elementów od {{Code|1}} do {{Code|3}}, z dodatkowym elementem: {{Code|<nowiki>["LINK"] = true</nowiki>}}, a element czwarty to jest: {{Code|tablica_przekierowania}} {{Patrz|tablica_przekierowania}}, a jeżeli te dwa elementy, nie licząc czwartego, wcale nie istnieją, wtedy jest tworzony łańcuch znakowy z tego pierwszego elementu. Tak tworzymy, nową wersję tablicy: {{Code|tab_artykul}} {{Patrz|tab_artykul-nowa wersja}}, lub łańcuch znakowy, w postaci: <syntaxhighlight lang="lua"> tab_artykul=((artykul)and(parametry or naglowek))and{[1]=artykul,[2]=parametry,[3]=naglowek,["LINK"]=true,} or artykul; </syntaxhighlight> Funkcja zwraca trzy parametry, tzn. parametry: {{LinkPatrz|tab_artykul-nowa wersja}}, {{LinkPatrz|znaki_niedozwolone}} i tablicę przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, co skrótowo piszemy: {{Patrz|zwracane-ParametrPierwszy}}: <syntaxhighlight lang="lua"> return tab_artykul,znaki_niedozwolone,tablica_przekierowania; </syntaxhighlight> ===== Rozwijanie nazwy linku artykułu ===== Do rozwijania nazwy linku służy funkcja: {{Code|{{sr|#p.DekodowanieTekstuNazwLinku|p=StronicowyParser/Pomocne}}}} {{Patrz|p.DekodowanieTekstuNazwLinku}}, pod względem szablonowym i nie tylko. Funkcja rozwija tą nazwę tym: {{LzLua|frame:preprocess}}, jedynie nie rozwija szablonów stronicowego parsera, podane podkategoriach w kategorii: {{Code|{{lk2|Szablony stronicowe}}}}, za pomocą odpowiednich metod, bo to by wywołało nieskończoną pętle, i dlatego takie szablony są zamieniane tylko na wywołania symboliczne. ==== Dalszy opis funkcji nadrzędnej przy istnieniu parametrów linkowych normalnych, czy szablonowych (linków inteligentnych) ==== ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|{{=}}}} {{Code|1}} ===== Tworzony jest numerek: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{Patrz|numer_rodzaju_artykulu_w_podreczniku}}, który w stosunku do: {{LinkPatrz|numer_rodzaju_artykulu}}, jest większy o jeden, a schemat tej operacji: <syntaxhighlight lang="lua"> local numer_rodzaju_artykulu_w_podreczniku=numer_rodzaju_artykulu+1; </syntaxhighlight> ====== Tworzenie tablicy: {{nobold|{{Code|tablica_artykulow_zebranych}}}} ====== Opiszemy tutaj tablicę: {{Code|tablica_artykulow_zebranych}}, opisaną wstępnie w punkcie: {{LinkPatrz|tablica_artykulow_zebranych}}. ; Tablica{{dk}} {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}}, nie jest tablicą{{dk}} Gdy element pierwszy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, nie jest tablicą, wtedy jedynie liczymy, czy ona ma znaki niedozwolone: {{Code|wzor_znaki_niedozwolone}} {{LinkPatrz|wzor_znaki_niedozwolone}}, a póżniej wiedząc ten element, który jest aktualną nazwą artykułu kiążki, tworzymy tabelę {{Patrz|tablica_artykulow_zebranych-imicjacja}}: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych={aktualny_artykul_ksiazki,0,false,}; </syntaxhighlight> ; Gdy element{{dk}} {{nobold|{{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}}}, jest łańcuchem znaków{{dk}} Wpierw liczone są parametry z wywołania, z opcją, czy ma liczyć, czy nazwa artykułu ma znaki niedozwolone, z funkcji: {{LinkŚródtytuł|ParametrPierwszy}}: <syntaxhighlight lang="lua"> tab_pozycja_elementow_w_spisie_rzeczy[1],znaki_niedozwolone,tablica_przekierowania=ParametrPierwszy(tab_pozycja_elementow_w_spisie_rzeczy[1],true); </syntaxhighlight> ; Inna książka - atrybut, tzn. czy artykuł wychodzi poza daną książkę, lub jego przekierowanie w niej kieruje na stronę poza nią{{dk}} Dalej sprawdzane jest, czy książka przyjmuje atrybut, tzn.: '''czy inna książka''', wtedy liczymy to z kodu z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jeżeli jej wartość istnieje, tzn.: {{Code|czy_inna_ksiazka}} {{Patrz|czy_inna_ksiazka}}: <syntaxhighlight lang="lua"> local czy_inna_ksiazka=tablica_przekierowania and tablica_przekierowania[1] and tablica_przekierowania[1][5] or nil; </syntaxhighlight> ; Tablica przekierowania artykułu względem bieżącej książki{{dk}} Element: {{Code|<nowiki>[1][5]</nowiki>}}, to jest element tablicy: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, który przedstawia, czy to jest artykuł bieżącej książki, którego przekierowanie kieruje, wtedy ten parametr ma wartość {{Code|true}}, a gdy adres przekierowania wskazuje na inną książkę, wtedy {{Code|false}}. Jeśli ten parametr ma wartość fałszywą, wtedy jest sprawdzane, czy jest tablicą w: {{Code|czy_tablica}} {{Patrz|czy_tablica}}, według: <syntaxhighlight lang="lua"> czy_tablica=parametry_modul.TypeTable(tab_pozycja_elementow_w_spisie_rzeczy[1]); </syntaxhighlight> Lub w przeciwnym wypadku liczymy parametry artykularne z tablicy przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, a jeżeli parametry lub nagłówek przekierowania, w tej tablicy, istnieje, wtedy parametr: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, przyjmuje wartość {{Code|true}}, w przeciwnym wypadku wartość fałszywą. Gdy ten element nie jest tablicą, to tworzona jest nazwa pełna artykułu: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}} i umieszczana w tablicy: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, w sposób, co dalej jest tworzona w dalszych operacjach tablica: {{LinkPatrz|tablica_artykulow_zebranych}}, z podobną tablicą początkową jak w poprzednim przypadku jego tworzenia, czyli jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}. ; Tablica zebranych artykułów i porównywanie artykułu z nagłówkiem, czy istnieje wcześniejszy artykuł bez niego{{dk}} Gdy element jest jednak tablicą, też jest liczona pełna nazwa artykułu (gdy nazwa artykułu przekierowania istnieje, wtedy ona jest liczona z: {{Code|tablica_przekierowania[2]}}, w przeciwnym wypadku, jeśli element: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}, jest tablicą, wtedy liczymy ją z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1][1]}}, w innym wypadku z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy[1]}}), a z niej liczymy tablicę: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, jak w: {{LinkPatrz|tablica_artykulow_zebranych-imicjacja}}, w przypadku pierwszego artykułu nienagłówkowego. A w przypadku pierwszego artykułu, który może być tylko z nagłówkiem, bo tego bez, w spisie, artykuł poprzedni nie istnieje, a więc tego tam nie ma tam w takim przypadku. Gdy funkcja napotkała artykuł o takim samym stronie, co poprzednio, to do wartości początkowej, bez definiowania jeszcze raz tej samej tablicy, jest ustawiane odpowiednio: <syntaxhighlight lang="lua"> tablica_artykulow_zebranych[3]=true; </syntaxhighlight> Co informuje, że artykuł jest ten sam, tylko inny nagłówek niż poprzedni, a poprzedni pierwszy jest bez niego. ====== Rozwijanie nazwy linku ====== Kompletowany jest drugi element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, rozwijając szablony w nim względem funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}. Dalej z tej nazwy są usuwane znaki specjalne według funkcji: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, z modułu: {{Code|{{ld2|Specjalne}}}}. Następnie działamy funkcją: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}, które końcowe spacje usuwa, a wewnętrz powtarzające zamienia kolejne na jedną spację. ====== Dodawanie do tablicy problemów, jeśli nastąpił problem ze znakami niedozwolonymi ====== A między czasie, gdy mamy niedozwolone znaki: {{Code|znaki_niedozwolone}} {{LinkPatrz|znaki_niedozwolone}}, za pomocą funkcji pytającej sprawdzamy, czy element inny zgłoszeniowy został dodany do tablicy problemów: {{Code|{{sr|#p.CzyJestTakiProblemowyElement|p=StronicowyParser/Problemy}}}}, aż w końcu dodajemy ten problem, jeśli go nie ma przy pomocy funkcji: {{Code|{{sr|#p.UstawTakiProblemowyElement|p=StronicowyParser/Problemy}}}}. ====== {{Śródtytuł|inicjacja_i_kompletowanie_zmiennych}}Ustalanie nazwy jednostki, kompletowanie linii artykułów i inicjowanie pozycji, w tabeli zebranych elementów, w tabeli zebranych elementów ====== Ustalamy nazwę jednostki z funkcji: {{Code|{{sr|#p.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem|p=StronicowyParser/Potrzebne}}}}, i inicjujemy tą wartością, czyli: {{Code|nazwa jednostki}} {{Patrz|nazwa jednostki}}, wartość starą: {{Code|stara_nazwa_jednostki}} {{Patrz|stara_nazwa_jednostki}}, według: <syntaxhighlight lang="lua"> ---- Piszanie pełnej nazwy jednostki bez parametrów i nagłówka; local nazwa_jednostki=stronicowyparser_potrzebne_modul.UzyskanieTylkoNazwyLubTabeliNazwyLinkuStronyWoluminuZTabeliZParametramiOrazIdentyfikatorem(tab_pozycja_elementow_w_spisie_rzeczy[1],false); ---- Inicjowanie starej wartości tą policzoną; local stara_nazwa_jednostki=nazwa_jednostki; </syntaxhighlight> Dalej {{Śródtekst|uchwyt=tabela_rozdzial_artykulow2|tekst=inicjujemy pozycję, jeżeli nie istnieje taka, na podstawie policzonej wartości: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, w tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}}}, według: <syntaxhighlight lang="lua"> if(not tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku])then tabela_rozdzial_artykulow2[numer_rodzaju_artykulu_w_podreczniku]={};end; </syntaxhighlight> Co {{Śródtekst|uchwyt=linia_artykokow|tekst=dalej linię artykułów {{Code|linia_artykokow}} {{LinkPatrz|linia_artykokow}}, kompletujemy, funkcją: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, z modułu: {{Code|{{ld2|Szablonowe}}}}, znając tablicę: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}}}, według: <syntaxhighlight lang="lua"> linia_artykokow=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(linia_artykokow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); </syntaxhighlight> ====== Uwzględnianie niepodanego elementu nienagłówkowego w tablicy zebranych parametrów ====== Gdy tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, istnieje, wtedy sprawdzamy, czy zmienna logiczna: {{Code|czy_tablica}} {{LinkPatrz|czy_tablica}}, jest prawdą i czy: {{Code|stara_nazwa_jednostki}} {{LinkPatrz|stara_nazwa_jednostki}}, czy jest nie pusta, w takim razie jej element {{Code|2}} przydzielany jest do zmiennej: {{Code|przekierowanie}} {{Patrz|przekierowanie}}, czyli nazwie artykułu przekierowania. Inicjujemy nową zmienną: {{Code|przekierowanie}} {{LinkPatrz|przekierowanie}}, z artykułu, parametrów i nagłówka, ale wpierw sprawdzamy, czy dwa ostatnie istnieją, według: <syntaxhighlight lang="lua"> przekierowanie=przekierowanie and ((tablica_przekierowania[3] or tablica_przekierowania[4]) and {przekierowanie, tablica_przekierowania[3], tablica_przekierowania[4],["LINK"]=true,}or przekierowanie) or nil; </syntaxhighlight> Tworzony jest nowy element: {{Code|nazwa jednostki}} {{Patrz|nazwajednostki-nowy}}, z: {{LinkPatrz|nazwa jednostki}}, parametrów i nagłówka, według rysu: <syntaxhighlight lang="lua"> nazwa_jednostki={nazwa_jednostki, tab_pozycja_elementow_w_spisie_rzeczy[1][2], tab_pozycja_elementow_w_spisie_rzeczy[1][3],["LINK"]=true,}; </syntaxhighlight> Jeżeli parametr drugi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, a trzeci jej jest {{Code|false}}, wtedy kreujemy tablicę: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Wsadzamy element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do zbioru: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}. Następnie jej drugiemu elementowi: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, dawana jest wartość {{Code|1}}, aby nie dało się ponownie tworzyć i wsadzać element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, według funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}, odpowiedzialny za artykuł nienagłówkowy, ktorego nie ma w spisach treści książki, ale są one w wersji nagłówkowej. Jeżeli tablica przekierowania: {{Code|tablica_przekierowania}} {{LinkPatrz|tablica_przekierowania}}, jednak nie istnieje, wtedy tak samo sprawdzamy, co poprzednio potem, ale po spełnieniu tych warunków robimy inną tablicą: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, i tę tablicę robimy podobnie, i inicjujemy te same elementy też podobnie. ====== Uwzględnianie pozycji podanej w tablicy zebranych elementów ====== Tworzymy zmienną: {{Code|ile_dodac_do_poziomu_artykulu}} {{Patrz|ile_dodac_do_poziomu_artykulu}}, z drugiego elementu tablicy: {{Code|tablica_artykulow_zebranych}} {{LinkPatrz|tablica_artykulow_zebranych}}, następnię tworzymy inną zmienną: {{Code|ile_dodac_do_poziomu_artykulu_lub_nil}} {{Patrz|ile_dodac_do_poziomu_artykulu_lub_nil}}, co uwidaczniamy wzorem: <syntaxhighlight lang="lua"> local ile_dodac_do_poziomu_artykulu_lub_nil=((ile_dodac_do_poziomu_artykulu)and(ile_dodac_do_poziomu_artykulu>0))and ile_dodac_do_poziomu_artykulu or nil; </syntaxhighlight> Tą zmienną wykorzystamy do sformułowania: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. {{Śródtekst|tekst=Tworzymy zmienną: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, którą wsadzamy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycji: {{Code|numer_rodzaju_artykulu_w_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulu_w_podreczniku}}, przy pomocy funkcji: {{Code|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} {{LinkPatrz|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}}.|uchwyt=__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ===== Gdy: {{Code|numer_rodzaju_artykulu_poprz}} {{Code|>{{=}}}} {{Code|2}} ===== Będziemy tutaj operowali, gdy parametr drugi zwracany z funkcji: {{LinkPatrz|AnalizujLinkSzablonyOrazLinki}}, wskazuje na nie artykuł książki, zatem ten rozdział jest właśnie dla tego przypadku. ====== Odkodowanie i przygotowanie zmiennych artykułu linku, jej nazwy, także kodu języka i projektu ====== * Gdy pierwszy element tablicy: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, jest tabelką, wtedy do przetworzenia jego wykorzystujemy funkcję: {{LinkŚródtytuł|ParametrPierwszy}}. * Dla drugiego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, co jest nazwą linku, wtedy gdy nazwa linku normalnego, czy szablonowego, jest zakodowana, to ją odkodujemy, którego każdy jego element kod odkodujemy według funkcji: {{LinkPatrz|p.DekodowanieTekstuNazwLinku}}, następnie z niej usuwamy znaki specjalne według: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, następnie usuwamy końcowe spacje i wewnątrz kolejne spacje zaastępujemy jedną spacją, co robimy według: {{Code|{{sr|#p["Odstępy"]|p=Parametry}}}}. * Dla trzeciego i czwartego takiego elementu z: {{Code|tab_pozycja_elementow_w_spisie_rzeczy}} {{LinkPatrz|tab_pozycja_elementow_w_spisie_rzeczy}}, te elementy odkodujemy, następnie z nich usuwamy końcowe spacje, a wewnątrz kolejne spacje zastępujemy jedną, według tej samej funkcji, co powyżej. ====== Przygotowanie zmiennych, inicjowanie tablicy: {{Code|tab_stare}}, i wsadzanie jej do tablicy ogólnej: {{Code|tabela_rozdzial_artykulow2}} ====== Dalej {{PobierzŚródtekst|tabela_rozdzial_artykulow2}}, także co {{PobierzŚródtekst|linia_artykokow}}, co wszystko robimy podobnie jak w rozdziale: {{LinkŚródtytuł|inicjacja_i_kompletowanie_zmiennych}}. {{PobierzŚródtekst|__FUNKCJA_DO_WSTAWIANIA_DO_SPISU_RZECZY}} ==== Definicja tablicy: {{Code|tab_stare}}, inicjowanie jej elementów w różnych przypadkach ==== Przedstawiamy tutaj ogólną definicję zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, które określają ogólnie jaką jego wersję użyć w poszczególnych punktach funkcji: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Ta wersja jest jedynie sformułowana dla artykułów w rozdziale, a nie dla rozdziałów, bo w tablicy, do której jest ona wsadzana przyjmuje ona możliwy numerek od "2" do "13", a nie również "1". Jej wersja ogólna: <syntaxhighlight lang="lua"> local tab_stare= { ---- Początek elementów alternatywnych { ---- Początek wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[1], -- artykuł bez pełnej nazwy ksiązki, bez parametrów i nagłówka, bo ich nie posiadałna samym początku; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- artykuł bez pełnej nazwy książki, bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec wersji dla artykułu tab_pozycja_elementow_w_spisie_rzeczy[2], -- nazwa linku artykułu normalnego, czy szablonowego; ---- Początek elementów alternatywnych dla przekierowania ---- Poczatek parametrów przekierowania { tablica_przekierowania[2], -- nazwa przekierowania artykułu; tablica_przekierowania[3], -- parametry przekierowania artykułu; tablica_przekierowania[4], -- nagłówek przekierowania artykułu; ["LINK"]=true, -- zmienna świadcząca, że nazwa przekierowania artykułu jest z parametrami i nagłówkiem; }, ---- lub tablica_przekierowania[2], -- nazwa przekierowania artykułu; ---- Koniec parametrów przekierowania tablica_przekierowania[1], -- tablica o definicji: { nazwa_przestrzeni_strony_przekierowania, -- nazwa przestrzzeni nazw przekierowania artykułu; nazwa_przestrzeni_ksiazki_strony_przekierowania, -- nazwa przestrzeni książki przekierowania artykułu; nazwa_ksiazki_strony_przekierowania, -- nazwa książki orzekierowania artykułu; true/nil, -- nil, gdy strona jest przekierowaniem, true, gdy strona główna jest taka, lub strona ma link do nieistniejącej strony w innej książce; true/false, -- true, gdy przekierowanie wskazuje na artykuł w taj samej książce, false, gdy nie; czy_przekierowanie), -- (true/false): true, gdy strona jest przekierowaniem, false jak nie, to strona główna książki, nil, w przeciwnym wypadkach; }; ---- lub nil, -- dotycząca przekierowania artykułu, a tutaj strona nie ma przekierowania, więc: nil; nil, -- dotycząca tablicy książki, na którą wskazuje przekierowanie, a tutaj nie ma tablicy, więc: nil; ---- Koniec elementów alternatywnych dla przekierowania tab_pozycja_elementow_w_spisie_rzeczy[3], -- kod języka; tab_pozycja_elementow_w_spisie_rzeczy[4], -- kod projektu; tab_pozycja_elementow_w_spisie_rzeczy[5], -- adres artykułu bez przetworzenia w linku normalnym,czy szablonowym; ile_dodac_do_poziomu_artykulu_lub_nil, -- parametr mający tylko wartości: 1, gdy do aktualnego poziomu musi być dodane jeden - ta wartość, tylko dotyczy artykułów należących do tej samej książki, lub: nil, gdy nic, czyli w pozostałych przypadkach; tab_pozycja_elementow_w_spisie_rzeczy[6], -- "url", pozycja świadcząca, że to jest link zewnętrzny, a nil, gdy to jest normalny link; }, ---- lub tab_pozycja_elementow_w_spisie_rzeczy[1], -- nazwa artykułu linku, która nie posiada, ani parametrów w sobie, a po nim nagłówka, lub bezpośrednio po nazwie; ---- lub { tab_pozycja_elementow_w_spisie_rzeczy[1][1], -- nazwa artykułu bez parametrów i nagłówka; tab_pozycja_elementow_w_spisie_rzeczy[1][2], -- parametry artykułu, z którym on został wywołany w linku; tab_pozycja_elementow_w_spisie_rzeczy[1][3], -- nagłówek strony, wstawiany po parametrach lub nazwie strony; ["LINK"]=true, -- zmienna świadcząca, że nazwa artykułu jest z parametrami i nagłówkiem; }, ---- Koniec elementów alternatywnych { #przedrostek_listy, -- poziom listy, w którym jest artykuł, dla artykułów w linii z listą, w innym wypadku dla artykułu znajdującego się w rozdziale dodatnim, czy ujemnym jest zero; przedrostek_listy, -- przedrostek listy w postaci wzoru, który jest w nawiasie we wzorze do przechwytywaniem: "\n([;%*:#])", przeciwnie dla artykułów w rozdziale dodatnim ma wartość pustą; tekstowy_przedrostek, -- numeracja dodatkowa w rozdziale dla artykułu, gdy nie ma takiej numeracji, bo nie da się jej wydzielić, to ma wartość pustą; w_rozdziale, -- czy artykuł jest w rozdziale dodatnim normalnym, czy centrowanym znacznikowym lub szablonowym, wtedy "true", w przeciwnym wypadku: "false"; }, linia_artykokow, -- skompletowana linia z artykułem, dla którego jest pozycja: "tab_stare"; true/false, -- true, gdy nazwa artykułu pochodzi bezpośrednio od szablonu {{SpisTreści}}, a w przeciwnym wypadku ma wartość: false; true/false, -- true, gdy artykuł pochodzi z tego samego podręcznika, przeciwnie: false; ---- Początek elementów alternaatywnych Ile(numer_rodzaju_artykulu,tabela_rozdzial_artykulow2), -- który numer artykułu, w momencie wsadzenia do tabeli zbierania rozdziałów i w nich artykułów, nawet w rozdziale; ---- lub nil, -- nil, wtedy gdy link jest tak sobie dodany, który nie należy do żadnego spisu, a po nim elementy jego z nagłówkiem natomiast należą; ---- Koniec elementów alternatywnych }; </syntaxhighlight> W powyższym: {{Tag|syntaxhighlight|parametry=lang="lua"}}, dla elementu: {{Code|<nowiki>---- lub</nowiki>}}, jest powiedziane, że są dostępne alternatywy, które są zawarte w tablicy, że wybieramy te, aby nie spowodować czysto podwójnej tablicy, aby każda tablica zawierały inne elementy, jak wiele, a nie jedną tablicę, jak i łańcuchy znaków, wartość nil, powoduje, że czy ma być taka tablica, ale nie podwójna, co to znaczy podowójna, tzn. tablica w sobie zawiera inną jedyną tablicę, a tak nie może być, a jak zawiera jedną tablicę, to musi posiadać inne nienilowe elementy. == Funkcje tablicy transportu == === {{Śródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}}{{Code|p.AnalizaNapisuWprowadzeniaTekstu}} === Funkcja przyjmuje jako parametr nieskompletowaną i nieprzetworzony tekst napisu wprowadzenia tekstu. On kompletujei przekształca go w odpowiedni sposób,aby otrzymać czysty tekst tytułu rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaNapisuWprowadzeniaTekstu(rozdzial,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} | _1 = Ten tekst tytułu rozdziału, o którym mówimy. | 2 = {{Code|pelna_nazwa_spisu_tresci}} | _2 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci}} | 3 = {{Code|pelna_nazwa_spisu_tresci_szablonowa}} | _3 = Jak w: {{LinkPatrz|pelna_nazwa_spisu_tresci_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} ==== Obiekty typu {{nobold|{{Code|SZABLON}}}} ==== Funkcja korzysta z funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, funkcja ma zdefiniowaną pierwszą jej funkcję, która dla: {{Code|obiekt {{=}} "SZABLON"}}, używamy pierwsze dwie tabelę, te tabele: Pierwsza {{Patrz|szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}, która służy do zamieniania szablonów na ich parametry, tutaj pierwsza, to jest tablica: {{Code|{{sr|#p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_napisach_do_wprowadzenia_tekstu={ ["MDL:RozszerzonyLink"]=1, ["Kompletność"]="", ["Kompletność krótka"]="", ["Kompletność junior"]="", ["Książka"]="", }; </syntaxhighlight> Druga: {{Code|{{sr|#p.szablony_dozwolone_w_nazwach_linkowych|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_dozwolone_w_nazwach_linkowych}}, też służy do tego samego. Funkcja wykorzystuje tablice szablonów korekt umieszczonych w nazwie linku, czy to normalnego, czy szablonowego (inteligentnego), którego definicja {{Patrz|p.szablony_dozwolone_w_nazwach_linkowych}}: <syntaxhighlight lang="lua"> p.szablony_dozwolone_w_nazwach_linkowych={ ["Korekta"] =2, }; </syntaxhighlight> ===== Funkcje zawartości i dodatków, dla szablonów ===== One służą do zamieniania wywołań szablonowych na odpowiednie ich zawartości parametrów określone przez numery parametrów tych elementów w tch tabelach. Jeżeli przy którym wywolaniu przy wykorzystaniu kolejnych tych tabel przy użyciu funkcji: {{Code|{{sr|#p.ObiektySzablonoweFormatowaniaTekstu|p=StronicowyParser/Rozdziały}}}}, nastąpiło zamienienie, to funkcja pierwsza w: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstu|p=Szablonowe}}}}, zakańcza się z tą wartością. A jeżeli nie to uruchamia się funkcj dodatków: {{Code|{{sr|#p.ObiektySzablonoweUzyskiwaniaUruchomieniaTekstu|p=StronicowyParser/Rozdziały}}}}, a jeśli nastąpiło zastąpienie, to funkcja kompletowania się kończy z tą wartością. ===== Szablonowe linki ===== Dalej jeżeli tak się nie stało, to uruchamia się funkcja parametrów, w którym wywołanie szablonowe jest rozkładane na nazwę szablonu, modyfikatory i parametry. Dalej jest spradzanie , czy jest to link inteligentny według funkcji: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, a gdy jest, to funkcja kończy swoje działania z nazwą tego linku lub jego adreesem wewnętrznym, a jeśli on nie jest tym, to sprawdza, czy są inne szablonowe linki, które podejrzewa się poprzez wywołanie funkcji: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoObiektu|p=StronicowyParser/Potrzebne}}}}, a jeżeli jest tym linkiem, to funkcja składania zwraca też jak poprzednio nazwę linku lub jego adres wewnętrzny, ewentualnie z dodatkiem. A gdy nie, to w innym przypadku sprawwdzane, czy to jest inny link wewnętrzny generowane przez szablony, która spradza funkcja tutaj: {{Code|{{sr|#p.NazwaInnegoSzablonowegoLinkowegoSpisuRzeczy|p=StronicowyParser/Potrzebne}}}}, a jeżeli szablon jest tym linkiem, to kunkcja składania zwraca jego nazwę linkową. ===== Szablony rozwijane przez {{lpg|JavaScript}} ===== A następnym krokiem jest sprawdzanie, czy nazwa szablonu jest jednych z elementów z tablicy: {{LinkPatrz|P.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}, która ma ten element, te szablony wymienione w tej tablicy są po to, aby służyły do rozwijania przez JavaScript, są to elementy wikikodu, które są pracochłonne ze względu na ich skomplikowany kod, czy wikikod, nawet {{lpg|Lua}} w {{lpr|Lua|Scribunto}}, i dlatego ich się nie rozwija przez stronicowy parser: {{Code|{{ld2|StronicowyParser}}}}, te nazwy szablonów są określone tablicą: {{Code|{{sr|#p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu}}: <syntaxhighlight lang="lua"> p.szablony_rozwijane_przez_javascript_w_napisach_wprowadzenia_tekstu={ ["Cytuj"]=true, ["Cytuj stronę"]=true, ["Cytuj pismo"]=true, ["Cytuj odcinek"]=true, ["Cytuj książkę"]=true, ["Cytuj grę komputerową"]=true, }; </syntaxhighlight> I funkcja wtedy zwraca zkompletowany szablon bez rozwijania jego, pod warunkiemjeżeli jest tym szablonem o tej nazwę szablonu wywołującego. ===== Co jest zwracane w przypadku szablonów ===== Te powyżej elementy dla funkcji parametrów, w niej wartości są zwracane do niej, a jeżeli ona przyjmuje wartość nienilową, to do funkcji składania zwracana jest jego wartość, a przeciwnie jest zwracane pierwszy parametr szablonu do niej. ==== Obiekty typu: {{nobold|{{Code|NOWIKI}}}}, {{nobold|{{Code|PRE}}}} i {{nobold|{{Code|ŹRÓDŁO}}}} ==== A gdy dla elementów, jeśli nazwa obiektu jest: {{Code|obiekt {{=}} "NOWIKI"}}, {{Code|obiekt {{=}} "PRE"}}, lub: {{Code|obiekt {{=}} "ŹRÓDŁO"}}, znacznik jest rozkładany na czynniki pierwsze, a jeżeli nnie ma zawartości, to przez funkcję skłądania jest zwracana wartość pusta, a jeśli nie, to pewne znaki specjalne tagu {{Tag|nowiki}}, które mają w nim być zamienione na tekst, są zamieniane na kody '''HTML''', co po zamienieniu ta ona jest zwracana. ==== Obiekty typu: {{nobold|{{Code|MATH}}}}, {{nobold|{{Code|GALERIA}}}}, {{nobold|{{Code|MAPAOBRAZU}}}}, i {{nobold|{{Code|INNEPRE}}}} ==== A jeżeli wartość: {{Code|obiekt}}, jest nie równa: {{Code|MATH}}, {{Code|GALERIA}}, {{Code|MAPAOBRAZU}} lub {{Code|INNEPRE}}, wtedy z zawartości zmiennej: {{Code|szablon}}, są wykorzystanne funkcje z modułu: {{Code|{{ld2|Specjalne}}}}, które w tej podanej zmiennej są usuwane z komentarze z: {{Code|{{sr|#p["UsuńKomentarze"]|p=Specjalne}}}}, zamieniane są linki zewnętrzne i wewnętrzne na ich nazwy lub adresy według: {{Code|{{sr|#p["ZamieńLinkiZewnętrzneNaTekst"]|p=Specjalne}}}} i {{Code|{{sr|#p["ZamieńLinkiWewnętrzneNaTekst"]|p=Specjalne}}}}. Są usuwane rozwinięte znaczniki szablonów stylów używając do tego celu: {{Code|{{sr|#p["UsuńSzablonyStylów"]|p=Specjalne}}}}. Są też usuwane znaczniki na podstawie: {{Code|{{sr|#p["UsuńZnaczniki"]|p=Specjalne}}}}. Z tekstu szablonu są usuwane normalne kategorie nieszablonowe: {{Code|{{sr|#p"UsuńKategorie"]|p=Specjalne}}}}. Są też usuwane z zawartości wywołania plików i interwiki z: {{Code|{{sr|#p["UsuńWywołaniaPlików"]|p=Specjalne}}}} i {{Code|{{sr|#p["UsuńInterwiki"]|p=Specjalne}}}}. Dalej z tego obiektu są usuwane znaki specjalne z: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}. A gdy mamy do czynienia z innymi znacznikami, to są zwracane jest zamiast niego wartość pusta do funkcji kompletowania. Dane z funkcji kompletowane są zwracane, które z niej są usuwane znaki specjalne z całości tekstu rozdziału: {{Code|{{sr|#p["UsuńZnakiSpecjalne"]|p=Specjalne}}}}, i znaki białe z końców tekstu i powtarzarzające się te znaki kolejne z wewnętrz są zamieniane na jedną spację, to się dzieje według funkcji: {{Code|{{sr|#p["UsuńZbędneBiałeZnaki"]|p=Specjalne}}}}. Cały taki wynik operacji robione w funkcji w nagłówku są zwracane do niej, to jest, co uzyskujemy nazwa rozdziału w postaci przetworzonej. === {{Śródtytuł|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}{{Code|p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}} === Opisane tutaj są podfunkcje, z których korzysta ta funkcja, co one robią, do czego są wykorzystane. ==== Opis funkcji: {{nobold|{{Patrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Funkcja służy do zbierania nagłówków i z niej danych,tzn. linków normalnych i inteligentnych, a także są zbierane nagłówki z listy bez artykułów i do nich elementy podlisty z artykułami w postaci wywołań linkowych w niej. Tworzona jest specjalnie dla niegp tablica: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, która w odpowiedni po przekształaceniach wsadzana jest do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.ZbieranieInformacjiWoluminuDanegoSpisuRzeczy(self,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,czy_artykul_korzystany,adres_ksiazki_glownego_spisu_tresci,__FUNKCJA_ZBIERANIA_DANYCH)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} | _1 = Jak w: {{LinkPatrz|self}}. | 2 = {{Code|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} | _2 = Kolejno jak w: {{LinkPatrz|nazwa_przestrzeni}}, {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{LinkPatrz|nazwa_ksiazki}}. | 3 = {{Code|nazwa_spisu_tresci}} | _3 = Jak w: {{LinkPatrz|nazwa_spisu_tresci}}. | 4 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _4 = Czy dany spis treści dla książki dla jej artykułu korzystanego, dla innej książki, wtedy to artykuł niekorzystany. | 5 = {{Code|adres_ksiazki_glownego_spisu_tresci}} {{Patrz|adres_ksiazki_glownego_spisu_tresci}} | _5 = Jest to wewnętrzny adres książki głównego spisu treści,jest to taki adresm na który wskazuje przekierowanie innej książki. | 6 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _6 = Jest to funkcja, która zbiera informacje o aktualnym artykule, która jest spisem treści, w postaci nieprzetworzonej przez funkcje z modułu: {{Code|{{ld2|StronicowyParser/Rozdziały}}}}, opisanego w: {{Code|{{sr|Rozdziały|StronicowyParser - Rozdziały|p=StronicowyParser}}}}, ta funkcja kopiuje, np. tabele danych bazy modułu: {{Code|{{m|Szablonowe}}}}, tzn: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}, i tabelę rozkładu elementów w niej na czynniki pierwsze, tzn.: {{Code|tablica_danych_parametrow_szablonu_strony}} {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}, co jest napisane w module: {{Code|{{ld2|StronicowyParser/ZbieranieDanychStron}}}}, a w dokumentacji: {{Code|{{sr|#p.ZbieranieInformacjiStronyEwentualnieWrazSkojarzonymi|p=StronicowyParser/ZbieranieDanychStron}}}}. }} ==== Funkcje lokalne ==== Funkcja ma w sobie też definicję funkcji lokalnych zdefiniowanej w tej funkcji tutaj opisywanej. ===== {{Śródtytuł|FunkcjaIteratoraTekstuZakodowego}}{{Code|FunkcjaIteratoraTekstuZakodowego}} ===== Funkcja służy do pomijania tego, co nie jest linkiem wewnętrznym, czy zewnętrznym, czyli oznaczone kodami: {{Code|LINKW}} lub {{Code|LINKZ}}, czy nawet szablonem linkuinteligentnego, czy innego służacego do generowania spisu treści, do tego celu również używa funkcji: {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}, oraz tego co nie jest w liście okreslonym wzorem {{Code|<nowiki>\n([#:*;]+)</nowiki>}} z mozliwym na początku tekstem, ale nie z kodami, w danej pozycji listy, lub co ewentualnie nie może być w możliwej liście, tzn.: {{Code|<nowiki>\n([#:*;]*)</nowiki>}}, ale wtedy musi tam być z tekstem, ale nie z kodami, na początku danej pozycji listy, nawet jeśli to nie jest lista, to też tak samo. Jeżeli funkcja nie ma kodów linków wewnętrznych, czy to normalnych, czy szablonowych, to się zakańcza z wartością domyślną {{Code|nil}}, w przeciwnym wypadku do sprawdzenia używa do tego funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, do sprawdzania, czy to jest link lub licencji, a jeżeli ta funkcja zwraca wartość {{Code|true}}, to cała funkcja zwraca {{Code|nil}}. Jeżeli oba te sposoby nie dały rezultatu {{Code|true}}, to wtedy funkcja zwraca wartość pustą, czyli okreslonym ciągiem znakowym o szwerokości zerowej. Funkcja ma w sobie dwie definicje funkcji: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}} i {{LinkŚródtytuł|CzySzablonLinkLubLicencja}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local FunkcjaIteratoraTekstuZakodowego=function(szablon,obiekt,kod)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. | 2 = {{Code|obiekt}} | _2 = Jak w: {{LinkPatrz|obiekt}}. | 3 = {{Code|kod}} | _3 = Jak w: {{LinkPatrz|kod}}. }} ====== {{Śródtytuł|PomijajLinkiOrazLicencje}}{{Code|PomijajLinkiOrazLicencje}} ====== Funkcja służy do sprawdzania, czy są odpowiednie szablony w kodzie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function PomijajLinkiOrazLicencje(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} Funkcja sprawdza, czy to są szablony spisu treści określone tablicą o kluczach, którymi są nazwy szablonów, z wartościami {{Code|true}}, czyli: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_licencji}}: <syntaxhighlight lang="lua"> p.szablony_licencji={ ["Licencja"]=true, }; </syntaxhighlight> Tzn., czy to są szablony ozdobne woluminu, którego tablica: {{Code|{{sr|#p.szablony_ozdobne_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_ozdobne_stron_woluminu}}, jest podobnie zbudowana, co poprzednia: <syntaxhighlight lang="lua"> p.szablony_ozdobne_stron_woluminu={ ["MDL:RozszerzonyLink"]=true, }; </syntaxhighlight> A jeżeli to są te szablony, to funkcja zwraca wartość {{Code|true}}. Jeżeli jednak to nie są te szablony, należy użyć tablic, tak samo zbudowanej jak poprzednie, czyli: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.linki_szablony_elementy_spisu_rzeczy}}: <syntaxhighlight lang="lua"> p.linki_szablony_elementy_spisu_rzeczy={ ["SpisTreści"]=true, ["Sekcja referencyjna"]=true, ["Sr"]=true, ["Link wewnętrzny"]=true, ["Ly"]=true, ["LinkOgólne"]=true, ["Lo"]=true, }; </syntaxhighlight> lub innej, inaczej zbudowanej niż poprzednie, ale ważne, że ma wartość niefałszywą, czyli taką tablicą: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{Patrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, jest: <syntaxhighlight lang="lua"> p.inne_linki_szablony_elementy_spisu_rzeczy={ ["SpisPozycja"]={true,numer_link="tyt",}, ["SpisZw"]={false,numer=1,link=2,}, }; </syntaxhighlight> Jak są te nazwy szablonów określone ich kluczami tych tablic, to funkcja zwraca wartość {{Code|true}}. A jeżeli jednak nie to funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}, jest sprawdzane,czy to jest link inteligentny, nawet przekierowanie, jeżeli link taki jest, to funkcja zwraca wartość w tym wypadku {{Code|true}}. W przeciwnym wypadku, jak nie zwrócił tej wartości,bo taka nie jest nazwa szablonu, to funkcja nic nie zwraca. ====== {{Śródtytuł|CzySzablonLinkLubLicencja}}{{Code|CzySzablonLinkLubLicencja}} ====== Funkcja sprawdzająca za pomocą: {{LinkŚródtytuł|PomijajLinkiOrazLicencje}}, na podstawie parsowania tekstu szablonu funkcją: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, z parsowanym przechwytywanym typem obiektu: {{Code|obiekt}} {{LinkPatrz|obiekt}}, równym {{Code|SZABLON}}. A jeżeli funkcja ta wspomniana w tekście zwróci {{Code|true}}, to funkcja taki obiekt policzy. Jeżeli liczba policzonych obiektów i znalezionych w wyniku parsowania jest większa od zera, to funkcja w nagłówku zwróci wartość {{Code|true}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzySzablonLinkLubLicencja=function(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ===== {{Śródtytuł|iteratorTekstuNaglowka}}{{Code|iteratorTekstuNaglowka}} ===== Jest to funkcja iteratora, którego funkcja zwracana (iterator) zwraca parametry, dla rozdziałów dodatnich i pozycji list. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function iteratorTekstuNaglowka() ... ---- Kod przed zwróceniem iteratora; return function() ... ---- Ciało funkcji iteratora; end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Iterator (funkcja zwracana przez funkcję w nagłówku) zwraca parametry w wyniku kolejnych wywołań: <syntaxhighlight lang="lua"> return przedrostek_listy,tekstowy_przedrostek,wyzyskane_wywolanie_szablonu_spis_tresci,true/false; </syntaxhighlight> Parametry zwracane przez iterator: {{OpisParametrów | 1 = {{Code|przedrostek_listy}} | _1 = Przedrostek pozycji listy, dla rozdziałów dodatnich jest wartością pustą. | 2 = {{Code|tekstowy_przedrostek}} | _2 = Numeracja pozycji w liście lub w nagłówku dodatnim. | 3 = {{Code|wyzyskane_wywolanie_szablonu_spis_tresci}} | _3 = Jest to rozdział bez numeracji i przedrostka pozycji listy. | 4 = {{Code|true/false}} | _4 = Wartość {{Code|true}} świadczy o rozdziale dodatnim, a w przypadku innym funkcja zwraca zawsze wartość tą {{Code|false}} jako ostatni element zwracany. }} Funkcja jest przykowana na rozdziałów dodatnich i pozycji list oraz innych linii, dla tego pierwszego funkcja zwraca: <syntaxhighlight lang="lua"> return "","",wartosc,true; </syntaxhighlight> Gdzie {{Code|wartość}} jest to zawartość napisu wprowadzenia tekstu (rozdziału dodatniego). W przypadku list oraz innych niż rozdziały dodatnie samo wyrażenie regularne {{lpg|Lua}} w {{lpr|Lua|Scribunto}} jest okreslone przez wyrażenie: <syntaxhighlight lang="lua"> local re="([#:*;]*)[^%S\n]*([%d%.]*[^%S\n]*[^\n]+)"; </syntaxhighlight> Funkcja wykorzystuje funkcję: {{Code|{{sr|#p.RozdzieleniePrawidloweLiniiWeWprowadzenieTekstuNumeracjiOdJegoNapisu|p=StronicowyParser/Rozdziały}}}}, aby zamienić zawartość pozycji listy na rozdział bez numeracji i numerację, i dlatego ta funkcja zwraca te dwie wartości. Gdy funkcja jak nie znajdzie więcej linii (wyszukań), to zwraca wartość {{Code|nil}} mówiąca o zakończeniu iteracji iteratora, tzn. dane dla iteratora się zakończyły. ===== {{Śródtytuł|LiniaArtykulow}}{{Code|LiniaArtykulow}} ===== Funkcja dla szablonów kompletowania określonym tabelką: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.szablony_kompletowania_stron_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.szablony_kompletowania_stron_woluminu={ ["Kompletność"]=true, ["Kompletność krótka"]=true, ["Kompletność junior"]=true, ["Książka"]=true, }; </syntaxhighlight> Rozdziela linię na wiele obsługiwanych podlinii. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function LiniaArtykulow(linia)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} {{Patrz|linia}} | _1 = Pojedyncza przetworzona linia. }} ====== {{Śródtytuł|SzablonAnalizujKompletnosc}}{{Code|SzablonAnalizujKompletnosc}} ====== Funkcja sprawdza, czy dane wywołania szablonu, ma swoją nazwę szablonu, która jest nazwą szablonu kompletowania. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function SzablonAnalizujKompletnosc(szablon)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|szablon}} | _1 = Jak w: {{LinkPatrz|szablon}}. }} ====== Dalszy opis funkcji ====== Możliwe są dwie opcje, szablon kompletowania jest pierwszy, a drugi drugi, lub odwrotnie. Funkcja obsługuje te oba przypadki. Ona stawia przecinkiem dla obu wersji ustawień, jeśli potraktować układem link i szablon kompletowania, to wstawiany jest on pomiędzy tymi układami, aby rozdzielić linię, a w liście bez jego znaków pozycji, na elementy przy pomocy funkcji: {{LzLua|mw.text.split}}, z opcją jako drugi parametr, aby uwzględniał wyrażenia regularne {{Code|false}}. W tych rozdzielonych linią tą funkcją dzielącą ciąg znakowy na tabelę, kody '''HTML''' przecinka są zamieniane na zwykły przecinek. Funkcja zwraca tabelę podzielonej linii na mniejsze podlinie, który można iterować funkcją: {{Code|pairs}} lub {{Code|ipairs}}. ===== {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} ===== Funkcja z parametrami, która uruchamia inną funkcję uruchamianą w: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, która wstawia tabelę {{LinkPatrz|tab_stare}}, do ogólnej tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, ewentualnie do {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} na pozycję {{Code|numer_podtablicy_w_tablicy}} {{Patrz|numer_podtablicy_w_tablicy}}, a dokładniej na pozycję {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}} w funkcji {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function WsadzanieParametryDoTablicy(linia,czy_linia_uwzgledniana) return function(tabela_rozdzial_artykulow2,numer_podtablicy_w_tablicy,tab_stare) ... ---- ciało funkcji. end; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|linia}} | _1 = Jak w: {{LinkPatrz|linia}}. | 2 = {{Code|czy_linia_uwzgledniana}} {{Patrz|czy_linia_uwzgledniana}} | _2 = Czy linię ma uwzględnić w powiększaniu poziomu o jeden dla artykułu. }} Parametry zwracanej funkcji przez tę w nagłówku: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow2}} | _1 = Jak w: {{LinkPatrz|tabela_rozdzial_artykulow2}}. | 2 = {{Code|numer_podtablicy_w_tablicy}} | _2 = Jak w: {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}. | 3 = {{Code|tab_stare}} | _3 = Jak w: {{LinkPatrz|tab_stare}}. }} ====== {{Śródtytuł|CzyZaliczac}}{{Code|CzyZaliczac}} ====== Funkcja sprawdza, czy z początkiem linii pozycji listy, bez przedrostka listy, jest z możliwym cudzysłowem, po którym następują liczby, litery, lub myślniki dolne, w takim pzypadku linia nie może składać się z nich, po ktorym występują znaki interpunkcyjne. Jeśli to sprawdzenie było pozytywne funkcja zwraca wartość logiczną odpwowiadającą {{Code|true}}, w przeciwnym wypadku jak {{Code|false}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function CzyZaliczac()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów funkcji. | komórka1 = tak }} Funkcja zwraca informację, czy daną linię traktować jako rozdział, chodzi tu o pozycje list, a w przypadku rozdziałów dodatnich wiadomo, że one są właśnie, że rozdziałami. ====== Dalszy opis funkcji ====== Funkcja sprawdza w funkcji zwracanej, czy rozważany rozdział jest centrowany danego artykułu, który siedzi pod rozdziałem lub w samym rozdziale, sprawdza, czy artykuł jest w rozdziale, sprawdza czy linia jest uwzględniana: {{Code|czy_linia_uwzgledniana}} {{LinkPatrz|czy_linia_uwzgledniana}}. Funkcja sprawdza, czy sekcja czy w: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, czy istnieje element: {{Code|tab_stare[2]}} {{Patrz|tab_stare[2]}}, i dalszy: {{Code|tab_stare[2][1]}} {{Patrz|tab_stare[2][1]}} - ten element jest to w: {{Code|tab_stare}}, taki: {{Code|#przedrostek_listy}} {{Patrz|#przedrostek_listy}}, a jeżeli to sprawdzenie przeszło pozytywnie, który dla tego jest poziomem listy, lub zerowego rozdziału lub rozdziału dodatniego. Dla każdej linii zmienna: {{Code|nowa_linia}} {{Patrz|nowa_linia}}, przyjmuje wartość {{Code|false}}, wtedy dla przypadku przeciwnego, tzn. gdy mamy rozdział i uwzględniamy artykuły w jednej linii, którym jest rozdział będacy pozycją listy, w zmiennej: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, jest ustawiany element: {{Code|tab_stare[2][4]}} {{Patrz|tab_stare[2][4]}}, czyli zmienna: {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}, zaczyna przyjmować wartość {{Code|true}}. Wsadzany jest wtedy do tablicy: {{Code|tabela_rozdzial_artykulow2}} {{LinkPatrz|tabela_rozdzial_artykulow2}}, na pozycję: {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, czyli to jest też: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, element {{Code|tab_stare}} {{LinkPatrz|tab_stare}}. Gdy: {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}}, gdy jednak przyjmuje wartość {{Code|false}}, wtedy jeśli poziom rozdzialu istnieje i przedrostek listy {{LinkPatrz|#przedrostek_listy}} jest większy od zera, i istnieje wiele artykułów w pozycji liście, wtedy: {{Code|ile>0}}, lub funkcja: {{LinkŚródtytuł|CzyZaliczac}}, przyjmuje wartość odpowiadające prawdziwej, w taki przypadku zmiennej: {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}}, przydzielamy wartość {{Code|true}}, by dalsze artykuły można było wsadzić, do tablicy z nowym rozdziałem. Powiększamy numer rozdziału o jeden, tzn.: {{Code|numer_rozdzialu_w_ksiazce}} {{Patrz|numer_rozdzialu_w_ksiazce}}, wtedy w zmiennej: {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, tabeli rozdziałów i w nich artykułów dla tej pozycji przydzielamy wartość równą tablicy pustej. Liczymy rozdział dla tego rozdział z artykułami, z funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści}}}}, liczymy napis rozdziału, wtedy do pierwszej pozycji tablicy utworzonej w: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, dla miejsca: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, czyli: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, piszemy: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{-#przedrostek_listy,przedrostek_listy,tekstowy_przedrostek,false,},linia,}; </syntaxhighlight> Gdzie: {{Code|rozdzial_na_tekst}} {{Patrz|rozdzial_na_tekst}}, to policzony rozdział, {{Code|-#przedrostek_listy}} {{Patrz|-#przedrostek_listy}} to poziom rozdziału ujemnego, i dlatego minus. A: {{Code|przedrostek_listy}}, to znaki poczatkowe z listy: {{Code|wzor_do_linii_z_lista}} {{LinkPatrz|wzor_do_linii_z_lista}}, a: {{Code|tekstowy_przedrostek}}, to numeracja tego rozdziału. Wartość {{Code|false}} to jest ze ten rozdział nie jest centrowany, a: {{Code|linia}} {{LinkPatrz|linia}}, to wyzyskana linia bez początku pozycji listy. Ustawiamy: {{Code|tab_stare[2][4]}} {{LinkPatrz|tab_stare[2][4]}}, na wartość {{Code|true}} i element: {{Code|tab_stare[6]}} {{Patrz|tab_stare[6]}}, ustawiamy na zero. Tworzymy tablicę pustą na pozycję: {{LinkPatrz|numer_podtablicy_w_tablicy}}, tablicy: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, i do tej tablicy dodajemy: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, za pomocą funkcji: {{LzLua|table.insert}}. A jeżeli nie jest tworzony nowy rozdział z listy w tabeli: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, to na pozycję: {{Code|numer_podtablicy_w_tablicy}} {{LinkPatrz|numer_podtablicy_w_tablicy}}, jest dodawany element: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, również tak jest robione, gdy artykuły znajdują się w rozdziale dodatnim, tzn. równaniowej lub centrowanej, tzn. wtedy: {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}, przyjmuje wartość {{Code|true}}. ===== {{Śródtytuł|AnalizaLiniiObiekty}}{{Code|AnalizaLiniiObiekty}} ===== Za pomocą funkcji: {{LinkŚródtytuł|LiniaArtykulow}}, linia: {{Code|linia_rozwazana}} {{Patrz|linia_rozwazana}}, jest rozdzielana na wiele linii. To wiele linii w postaci tabeli, są iterowane od: {{Code|k {{=}} 1}}, do: {{Code|k {{=}} #tab_linia}}, gdzie: {{Code|#tab_linia}} {{Patrz|#tab_linia}}, jest to długość linii, tzn. liczba elementów numerowanych tablicy, tzn. od 1 do zwyż aż do apotkania najbliższej przerwy lub końca. Wtedy dla pojedyńczej literacji mamy: {{Code|tab_linia[k]}} {{Patrz|tab_linia[k]}}. Iterujemy po kodach dla linii: {{Code|tab_linia[k]}} {{LinkPatrz|tab_linia[k]}}, przy pomocy funkcji: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}} {{Patrz|p.IteratorSzablonowyZakodowanegoTekstu}}, iteratorem: {{Code|iterator2}} {{Patrz|iterator2}}. Inicjujemy zmienną: {{Code|tab_nieobslugiwane {{=}} nil}}, następnie iterujemy: {{LinkPatrz|iterator2}}, uzyskując w każdej iteracji: {{Code|szablon}} {{LinkPatrz|szablon}}, {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}. Gdy mamy do czynienia: {{Code|SZABLON}}, lub: {{Code|LINKW}}, albo: {{Code|LINKZ}}, wtedy dla elementów tego pierwszego bierzemy tablicę: {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}}, dla elementu: {{Code|nazwa_szablonu}} {{LinkPatrz|nazwa_szablonu}}. Jeżeli ten element: {{Code|tabela_spisu}}, istnieje, element pierwszy: {{Code|tabela_spisu[1]}}, jest równy wartości {{Code|true}}, wtedy mamy do czynienia z szablonem {{s|SpisPozycja}}. Jej element: {{Code|tabela_spisu["numer_link"]}}, istnieje i jest równy: {{Code|tyt}} {{Patrz|tyt}}. Iterujemy po kluczach i jego wartościach tego szablonu i sprawdzamy, który element jest równy właśnie tej wartości, a jeżeli jest taki, to dla elementów nie równych niemu, a właściwie w jego wartości iterujemy po kodach funkcją: {{LinkPatrz|p.IteratorSzablonowyZakodowanegoTekstu}}, dla tej wartości, w ten sposób zbieramy tablicę wielowymiarową najpierw po: {{Code|obiekt}} {{LinkPatrz|obiekt}}, póżniej po: {{Code|kod}}, {{LinkPatrz|kod}}, którą nazwiemy: {{Code|tab_nieobslugiwane}} {{Patrz|tab_nieobslugiwane}}, którego każda jej wartość jest równa {{Code|true}}. Ta tablica mówi dla jakich elementów ma nie zbierać w tablicy elementów w głównej tablicy rozdziałów i jego artykułach. Dla elementu {{Code|tyt}} {{LinkPatrz|tyt}} tablicy parametrów przedrostek listy {{Code|przedrostek_listy}} ustawiamy na pusty, i liczmy numerację {{Code|tekstowy_przedrostek}} i zmienną {{Code|szablon}} {{LinkPatrz|szablon}} i ustawiamy zmienną {{Code|przerwij}} {{Patrz|przerwij}} na {{Code|true}}, aby dla tego szablonu nie zbierać elementów w tablicy rozdziałów i jego artykułów. W przypadku przeciwnym dla: {{Code|tabela_spisu}}, gdy ma wartość {{Code|false}}, wtedy mamy do czynienia z funkcją: {{s|SpisZw}}. Dla niej liczymy: {{Code|przedrostek_listy}}, którą ustawiamy na pustą wartość. A: {{Code|tekstowy_przedrostek}}, liczmy uzyskując parametr o kluczu: {{Code|tabela_spisu["numer"]}}, którym jest parametr o numerze: {{Code|1}}, i {{Code|szablon}} {{LinkPatrz|szablon}}, który liczmy z parametrów szablonu o kluczu {{Code|tabela_spisu["link"]}}, którym jest numer {{Code|2}}. Ustawiamy tutaj zmienną: {{Code|}} {{LinkPatrz|przerwij}}, na wartosć {{Code|true}}. ====== {{Śródtytuł|CzyObslugiwane}}{{Code|CzyObslugiwane}} ====== Funkcja sprawdzająca, które elementy są obsługiwane, jeśli istnieje tablica: {{Code|tab_nieobslugiwane}} {{LinkPatrz|tab_nieobslugiwane}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local CzyObslugiwane=function()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} ====== Dalszy opis funkcji ====== ; Uwzględnianie tablicy, reprezentujące artykuł w rozdziale, wstawiany do tablicy danego rozdziału{{dk}} Sprawdzany jest warunek: <syntaxhighlight lang="lua"> if((--[[wliczaj_artykuly_tego_rozdzialu]] true)and(not przerwij)and((not tab_nieobslugiwane)or(CzyObslugiwane())))then </syntaxhighlight> Jeżeli jest on spełniony, wtedy wywołujemy funkcję: {{LinkŚródtytuł|WstawianieElementowychZarejestrowanychStronDoBazyWoluminu}}, później dla: <syntaxhighlight lang="lua"> if((not czy_obslugiwane)and(not numer_rodzaju_artykulu_poprz))then </syntaxhighlight> Sprawdzamy, czy jest zebrana licencja z autorem według zmiennej: {{Code|licencja_z_autorem}} {{Patrz|licencja_z_autorem}}, i sprawdzamy, czy: {{Code|szablon}} {{LinkPatrz|szablon}}, jest wnetrzem szablonu, jeżeli tak, to ona przyjmuje wartość odpowiadająca prawdziwej, przeciwnie ma fałszywą. Jeżeli ten pierwszy warunek jest niespełniony, to tylko liczymy to samo coostatnio. ; Szablony licencji, i jego parametry, uwzględnianie jego tylko raz ca całą książkę, mieszcząca się w artykule głównej książki{{dk}} Następnie dla warunku, który musi być spełniony: <syntaxhighlight lang="lua"> if((not numer_rodzaju_artykulu_poprz)and(not przerwij)and(link_szablon)and((not tab_pozycja_elementow_w_spisie_rzeczy)or(not tab_pozycja_elementow_w_spisie_rzeczy[1]))and(czy_artykul_korzystany)and(licencja_z_autorem))then </syntaxhighlight> Sprawdzamy szablony licencji, takich jak: {{s|Licencja}}, według tablicy: {{Code|{{sr|#p.szablony_licencji|p=StronicowyParser/obiekty}}}}. Dla parametrów szablonu, liczymy jego parametry o kluczach, tzn.: {{Code|Autor}} {{Patrz|Autor}}, {{Code|Ukończone szkoły}} {{Patrz|Ukończone szkoły}}, {{Code|Email}} {{Patrz|Email}}, {{Code|Dotyczy}} {{Patrz|DotyczyDotyczy}}, {{Code|Licencjonowanie}} {{Patrz|Licencjonowanie}}, {{Code|Umowa prawna}} {{Patrz|Umowa prawna}} i {{Code|Konsekwencje}} {{Patrz|Konsekwencje}}, którego wartości przydzielamy do odpowiednich zmiennych. Każdą z tych zmiennych kompletujemy funkcją: {{Code|{{sr|#p.DekodowanieTekstuDekodowanieTekstu|p=StronicowyParser/Potrzebne}}}}, poprzez zwracaną przez nią funkcję, w której jest wykorzystywana funkcją: {{LzLua|frame:preprocess}}, do rozwijania. A dla elementu istniejącego: {{Code|Autor}}, piszemy zmienną: {{Code|licencja_z_autorem}} {{LinkPatrz|licencja_z_autorem}}, któremu przydzielamy wartość {{Code|false}}, co spowoduje, że nie będziemy analizowali jeszcze raz innego szablonu licencji. Te zmienne tego szablonu zbieramy natomiast w tablicy: {{Code|tabela_licencji_spisu_tresci}} {{Patrz|tabela_licencji_spisu_tresci}}, dane dotyczące licencji, więc: <syntaxhighlight lang="lua"> tabela_licencji_spisu_tresci={autor, szkoly, email, dotyczy, licencjonowanie, umowa_prawna, konsekwencje}; </syntaxhighlight> Co później przerywamy pętle po: {{Code|iterator2}} {{LinkPatrz|iterator2}}, instrukcją: {{Code|break}}. ==== Dalszy opis funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ==== Ściągamy tekst, tabelę bazy i tabelę parametrów strony o nazwie: {{Code|nazwa_modulu}}, przy pomocy funkcji: {{Code|{{sr|#p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony|p=StronicowyParser/Tekst}}}}, według: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=nil; local tekst_rozwiniety_calego_artykulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony=stronicowyparser_tekst_modul:RekurencyjnyZakodowanoSpreparowanyWikikodStrony(nazwa_modulu,false,nil,nil,function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) return nil; end,__FUNKCJA_PARAMETRY); </syntaxhighlight> Uruchamiamy funkcję: {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{LinkPatrz|__FUNKCJA_ZBIERANIA_DANYCH}}, jeżeli istnieje. Dalej wywołujemy funkcję: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały}}}}, w celu znalezienia tekstu: {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu}}, i iteratora: {{Code|iterator}} {{Patrz|iterator}}, po napisach wprowadzenia tekstu rozdziałów i ich zawartości rozdziałów i na podstawie: <syntaxhighlight lang="lua"> local iterator,tekst_rozwiniety_calego_artykulu=stronicowyparser_rozdzialy_modul.IterTekst(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,true,true,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych, __FUNKCJA, ---- funkcja sprawdza, czy wywołanie szablonowe, czy jest normalnym szablonem, a nie instrukcją warunkową, na podstawie pełnego adresu szablonu, określa i zawraca jego zawartość; __FUNKCJA2, ---- funkcja operująca na przygotowanej zawartości napisu wprowadzenia tekstu i tekście napisu wprowadzenia tekstu (rozdziału); __FUNKCJA_ANALIZA_SPISU ---- funkcja do analizy i modyfikacji tekstu (może zwracać wartość: nil) przed samym kodowaniem, jeżeli tekst jest w ogóle jest taki, a jeśli nie, ta funkcja wtedy nie jest uruchamiana, funkcja ta bezpośrednio jest wywoływana w tej funkcji, służy ona do wydzielenia spisu treści danego spisu treści, tak robimi, uruchamiając funkcję: IterTekst, dla każdego takiego spisu w odpowiedni sposób pokazaną w rozdziale: SpisTreści, co jest uwidocznione w module: Moduł:StronicowyParser/SpisTreści; ); </syntaxhighlight> Opis parametrów zwracanych: {{OpisParametrów | 1 = {{Code|iterator}} {{Patrz|iterator-IterTekst}} | _1 = Iterator po rozdziałach i jego zawartościach. | 2 = {{Code|tekst_rozwiniety_calego_artykulu}} {{Patrz|tekst_rozwiniety_calego_artykulu-IterTekst}} | _2 = Tekst przetworzony rozdziału. }} Odczytujemy tabelę: {{LinkPatrz|p.tablica_nazw_napisu_wprowadzenia_tekstu_pomijanych_w_rozwazaniach_na_stronach_otwarcia_woluminu}} i dalej: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{Patrz|p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu}}, o definicji: <syntaxhighlight lang="lua"> p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu={ ["spis treści"]=true, ["spis tresci"]=true, ["spis rzeczy"]=true, }; </syntaxhighlight> Robimy kopię tych tabel i przyłączamy do metatabeli: {{Code|{{sr|#p.metatablica_dla_elementowych_miar_tablicy_wedle_niewielkich_liter|p=Parametry}}}}, przy pomocy funkcji: {{LzLua|setmetatable}}, aby nie odrózniać tych rozdziałów ze względu na wielkość liter i polskie znaki. Inicjiujemy zmienną: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, wartością: {{Code|1}}, aby zbierać po kolei artykuły ze poszczególnego pojedynczego spisu treści. Ustawiamy maksymalny rozmiar rozdziału zerowego na {{Code|50}}, w zmiennej: {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{Patrz|maksymalny_rozmiar_rozdzialu_zerowego}}, według: <syntaxhighlight lang="lua"> local maksymalny_rozmiar_rozdzialu_zerowego=50; </syntaxhighlight> ===== {{Śródtytuł|AnalizaRozdzialu}}{{Code|AnalizaRozdzialu}} ===== Jest to funkcja do zbierania danych z pojedynczgo rozdziału o pewnej linii, inicjowana z jego parametrami, także tekstem rozdziału. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function AnalizaRozdzialu(rozdzial,linia_rozdzialu,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|rozdzial}} {{Patrz|rozdzial}} | _1 = Jest to tekst rozdziału. | 2 = {{Code|linia_rozdzialu}} {{Patrz|linia_rozdzialu}} | _2 = Jest to linia z rozdziałem. | 3 = {{Code|text}} {{Patrz|text}} | _3 = Jest to tekst rozdziału o pewnym napisie wprowadzenia tekstu. | 4 = {{Code|poziom_rozdzialu}} {{Patrz|poziom_rozdzialu}} | _4 = Jest to poziom danego rozdziału. | 5 = {{Code|poczatek_rozdzialu}} {{Patrz|poczatek_rozdzialu}} | _5 = Początek pozycji listy rozdziałów mechanizmu {{Strong|MediaWiki}}. | 6 = {{Code|numeracja}} {{Patrz|numeracja}} | _6 = Numeracja rozdziału. | 7 = {{Code|czy_rozdzial_centrowany}} {{Patrz|czy_rozdzial_centrowany}} | _7 = Czy dany rozdział jest centrowany. }} ====== Tabela artykułów rozdziałów i w nich artykułów oraz jego poszczególnych ====== Tworzymy tabelę: {{Code|tabela_artykulow}} {{LinkPatrz|tabela_artykulow}}, jeżeli nie istnieje, z pustą tablicą, a później dla elementu: {{Code|numer_rozdzialu_w_ksiazce}} {{LinkPatrz|numer_rozdzialu_w_ksiazce}}, jeżeli też go nie ma, to też pustą tablicą. Dalej liczymy napis wprowadzenia tekstu rozdziału dodatniego funkcją: {{LinkŚródtytuł|p.AnalizaNapisuWprowadzeniaTekstu}} i uwzględniamy je w tabeli rozdziałów dla danego rozdziału pod wartością: {{Code|tabela_rozdzial_artykulow[1]}}, w sposób: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow[1]={rozdzial_na_tekst,{poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany,},rozdzial,}; </syntaxhighlight> Dalej wprowadzamy zmienną: {{Code|czy_spis_rzeczy_napis_wprowadzenia_tekstu}} {{Patrz|czy_spis_rzeczy_napis_wprowadzenia_tekstu}}, mówiącą teraz rozpatrujemy rozdziały i artykuły w ramach spisu treści o nagłówkach typu: {{Code|Spis treści}}, czy: {{Code|SPIS RZECZY}}. Jeżeli wyszliszmy poza to, to ta zmienna wtedy przyjmuje wartość fałszywą, a definicja inicjacji tej zmiennej jest: <syntaxhighlight lang="lua"> local czy_spis_rzeczy_napis_wprowadzenia_tekstu=(poziom_rozdzialu)and(not czy_jest_spis_tresci)and(not dalej_nie_rozwazaj_spis_tresci)and(jakie_spisy_tresci[spreparowany_uzyskany_tekst_rozdzialu]); </syntaxhighlight> Gdzie: {{OpisParametrów | 1 = {{Code|poziom_rozdzialu}} | _1 = Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 2 = {{Code|czy_jest_spis_tresci}} {{Patrz|czy_jest_spis_tresci}} | _2 = Czy jesteśmy w spisie treści. | 3 = {{Code|dalej_nie_rozwazaj_spis_tresci}} {{Patrz|dalej_nie_rozwazaj_spis_tresci}} | _3 = Zmienna mówiąca, że teraz jesteśmy poza spisem treści. }} ====== Kiedy uwzględniamy artykuły rozdziału ====== Jeżeli jesteśmy w spisie, to zawsze są uwzględniane artykuły rozdziału, bo jest ustawiona zmienna: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, na {{Code|true}}, a poza na {{Code|nil}}. Funkcja jest przyszykowana jest dla jednego spisu treści, o ściśle określonym specjalnym napisie wprowadzenia tekstu, w danym spisie na stronie. ====== Iterator linii artykułu spis treści ====== Uruchamiamy iterator używając funkcji lokalnej: {{LinkŚródtytuł|iteratorTekstuNaglowka}}, według wywołania: <syntaxhighlight lang="lua"> local iterator=iteratorTekstuNaglowka(); </syntaxhighlight> Ustawiamy zmienną: {{Code|wliczaj_artykuly_tego_rozdzialu}} {{LinkPatrz|wliczaj_artykuly_tego_rozdzialu}}, aby wliczał lub nie, pewne artykuły rozdziału według: <syntaxhighlight lang="lua"> local wliczaj_artykuly_tego_rozdzialu=((wliczaj_artykuly_tego_rozdzialu)or(not jakie_nie_rozdzialy[rozdzial])); </syntaxhighlight> Iterujemy otrzymanym ostatnio iteratorem, uzyskując kolejno zmienne: {{Code|przedrostek_listy}} {{LinkPatrz|przedrostek_listy}}, {{Code|tekstowy_przedrostek}} {{LinkPatrz|tekstowy_przedrostek}}, {{Code|linia}} {{LinkPatrz|linia}}, i {{Code|w_rozdziale}} {{LinkPatrz|w_rozdziale}}. ; Kiedy rozdziałów zerowych nie liczymy jako je{{dk}} Dla rozdziałów, które nie sa poziomami z listą, sprawdzamy, czy to jest rozdział zerowy przy pomocy funkcji: {{Code|{{sr|#p.CzyZerowyNapisWprowadzeniaTekstu|p=StronicowyParser/Rozdziały}}}}, i sprawdzamy, czy on przekracza rozmiar: {{Code|maksymalny_rozmiar_rozdzialu_zerowego}} {{LinkPatrz|maksymalny_rozmiar_rozdzialu_zerowego}}, jeżeli jest tym rozdziałem i nie przekracza pewnego rozmiaru, to to jest rozdział traktowany jako zerowy niepomijany rozdział zerowy, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialu}} {{Patrz|nie_pomijaj_tego_rozdzialu}}, na {{Code|true}}. ; A jeśli to są rozdziały z listy zaczynające się od dwukropka w linii{{dk}} Gdy taki rozdział nie pretenduje do zerowych, to sprawdzamy funkcją: {{Code|{{sr|#p.CzyNapisWprowadzeniaTekstuDwukropkowyZDwomaApostrofamiOrazLiniamiNieWoluminu|p=StronicowyParser/Rozdziały}}}}, czy ten rozdział pominąć, a jeżeli ona przyjmuje wartość odpowiadającej fałszywej, czyli {{Code|false}}, wtedy ustawiamy zmienną: {{Code|nie_pomijaj_tego_rozdzialunie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, na taką samą wartość jak poprzednio. ; Inne rozdziały{{dk}} Dla rozdziałów innych ta wartość przyjmuje postać {{Code|false}}. ; Rozdziały jednak nie pomijane{{dk}} Dla rozdziałów, które nie są pomijane, wtedy zmienna: {{Code|nie_pomijaj_tego_rozdzialu}} {{LinkPatrz|nie_pomijaj_tego_rozdzialu}}, przyjmuje wartość {{Code|true}}, w takim przypadku wchodzimy do funkcji: {{Code|{{sr|#p.KompletowanieSzablonoweZakodowanegoTekstuZgodnieZJegoSzablonowymiElementami|p=Szablonowe}}}}, wtedy dla linków szablonowych sprawdzamy, czy to są linki określone tablicami: {{Code|{{sr|#p.linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.linki_szablony_elementy_spisu_rzeczy}}, {{Code|{{sr|#p.inne_linki_szablony_elementy_spisu_rzeczy|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.inne_linki_szablony_elementy_spisu_rzeczy}} lub ewentualnie funkcją: {{Code|{{sr|#p.PodzielNaElementyNazwowyWikiLinkInteligentny|p=StronicowyParser/Potrzebne}}}}. Innym sposobem sprawdzania, czy to jest szablon linkowy jest tablica: {{Code|{{sr|#p.szablony_kompletowania_stron_woluminu|p=StronicowyParser/obiekty}}}} {{LinkPatrz|p.szablony_kompletowania_stron_woluminu}}, lub {{Code|{{sr|#p.szablony_licencji|p=StroncowyParser/obiekty}}}} {{LinkPatrz|p.szablony_licencji}}. Jeżeli to jest szablon linków, wtedy jest zwracana wartość: {{Code|return true,obiekt,kod}}, w przeciwnym wypadku: {{Code|return false,obiekt,kod}}. Innym sposobem liczenia, czy to jest link, to wtedy może być to link normalny: {{Code|LINKW}}, który można sprawdzić funkcją: {{Code|{{sr|#p["CzyLinkWewnętrzny"]|p=Specjalne}}}}, wtedy jest zwracane {{Code|return true,obiekt,kod}}. Link też może być zewnętrzny, wtedy to jest: {{Code|LINKZ}}, wtedy funkcja zwraca wartość: {{Code|return true,obiekt,kod}}. ; Kiedy analizujemy artykuły rozdziału{{dk}} Następnie dla linii: {{Code|linia_rozwazana}} {{LinkPatrz|linia_rozwazana}}, co na podstawie tego liczymy, czy daną linię nie uwzględnić, w obliczeniach według schematu: <syntaxhighlight lang="lua"> local czy_linia_uwzgledniana=mw.ustring.match(linia_rozwazana,"^%s*%-%-+(.*)%-%-+%s*$"); local czy_linia=((not czy_linia_uwzgledniana)and(mw.ustring.match(linia_rozwazana,"^%s*[%-%+%=%~]+.*$") or ((#przedrostek_listy==0)and((mw.ustring.match(linia_rozwazana,"!"))and(mw.ustring.match(linia_rozwazana,"[^!]%s*$")))) or mw.ustring.match(linia_rozwazana,"^%s*<")) or nil); </syntaxhighlight> Co następnie jest ustawiana {{Code|nowa_linia}} {{LinkPatrz|nowa_linia}} na wartość {{Code|false}}. ; Warunek analizowania artykułów rozdziałów{{dk}} W obliczeniach raz uwzględniamy funkcję: {{LinkŚródtytuł|AnalizaLiniiObiekty}}, w ostatniej omawianej pętli, schematycznie: <syntaxhighlight lang="lua"> if(not czy_linia)then AnalizaLiniiObiekty(linia_rozwazana);end; </syntaxhighlight> ===== Dalsza część funkcji {{nobold|{{LinkPatrz|opis funkcji-ZbieranieInformacjiWoluminuDanegoSpisuRzeczy}}}} ===== Bierzemy zakodowany tekst: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu-IterTekst}}, i po nim iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}, wtedy iterujemy po parametrach: <syntaxhighlight lang="lua"> local parsuj_rozdzialami=nil; ---- ta zmienna służy na wypadek, gdy by nie była żadnych rozwazanych rozdziałów; for rozdzial_tab,text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany in iterator do ---- za każdym razem jest uruchamiana funkcja: AnalizaRozdzialu, przy rozważanym rozdziale; AnalizaRozdzialu(rozdzial_tab[1],rozdzial_tab[2],text,poziom_rozdzialu,poczatek_rozdzialu,numeracja,czy_rozdzial_centrowany); ---- oznacz zmienną: parsuj_rozdzialami, wartością; true, a póżniej jąnie inicjuj; if(not parsuj_rozdzialami)then parsuj_rozdzialami=true;end end; </syntaxhighlight> Parametry zwracane przez iterator: {{Code|iterator}} {{LinkPatrz|iterator-IterTekst}}: {{OpisParametrów | 1 = {{Code|rozdzial_tab}} {{Code|{{=}}}} {{Code|<nowiki>{ [1] = rozdzial, [2] = linia_rozdzialu, }</nowiki>}} | _1 = tabela składająca się z dwóch elementów: | 2 = Pod elementy tabeli: | nagłówek2 = tak | 3 = {{Code|rozdzial}} | _3 = Jak w: {{LinkPatrz|rozdzial}}. | 4 = {{Code|linia_rozdzialu}} | _4 = Jak w: {{LinkPatrz|linia_rozdzialu}}. | 5 = Inne parametry: | nagłówek5 = tak | 6 = {{Code|text}} | _6 = Jak w: {{LinkPatrz|text}}. | 7 = {{Code|poziom_rozdzialu}} | _7 =Jak w: {{LinkPatrz|poziom_rozdzialu}}. | 8 = {{Code|poczatek_rozdzialu}} | _8 = Jak w: {{LinkPatrz|poczatek_rozdzialu}}. | 9 = {{Code|numeracja}} | _9 = Jak w: {{LinkPatrz|numeracja}}. | 10 = {{Code|czy_rozdzial_centrowany}} | _10 = Jak w: {{LinkPatrz|czy_rozdzial_centrowany}}. }} Gdy nie napotkano żadnego rozważanego rozdziału, wtedy: {{Code|parsuj_rozdzialami}}, przyjmuje wartość {{Code|nil}}, w takim razie uruchamiana jest funkcja: <syntaxhighlight lang="lua"> if(not parsuj_rozdzialami)then AnalizaRozdzialu("Spis treści",nil,tekst_rozwiniety_calego_artykulu,nil,nil,nil,nil); end; </syntaxhighlight> Funkcja zwraca parametry inaczej, gdy artykuł, do którego należy książka jest korzystany, a inaczej, jeśli nie. W takim razie możemy zwracać na dwa sposoby: <syntaxhighlight lang="lua"> if(czy_artykul_korzystany)then return tabela_artykulow,tabela_licencji_spisu_tresci,przekierowanie_spisu_tresci; else return tabela_artykulow,nil,przekierowanie_spisu_tresci; end; </syntaxhighlight> Przy artykułach korzystanych, co jest określone zmienną: {{Code|czy_artykul_korzystany}} {{LinkPatrz|czy_artykul_korzystany}}, tabelę: {{Code|tabela_licencji_spisu_tresci}} {{LinkPatrz|tabela_licencji_spisu_tresci}}, przy jego spisach treści w książkach, do której należy ten artykuł, zwracana jest jako wartość przeważnie jako nierówna {{Code|nil}}, a dla artykułów z innych książkach, ta wartość już jest taka, tzn. przyjmuje wartość {{Code|nil}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2y2svf3qnrpc87sj0wsysyl7rnqnp1q Wikibooks:Moduły/StronicowyParser/Tekst 4 63524 558267 554425 2026-10-02T10:35:59Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558267 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana, * {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw, * {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} - przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony, * {{Code|inkludowana}} {{Patrz|inkludowana}} - przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej, * Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} - funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} - jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować, ** {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} - funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}, ** Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}: *** {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} - funkcja, np. dekodująca nazwę szablonu, *** {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} - funkcja, np. rozwijająca nazwę szablonu, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - funkcja do modyfikacji tekstu pobranego ze strony, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcje do generowania tablicy bazy kodów. Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - przetwarzany tekst, * {{Code|nazwa_modulu}} - nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}, * {{Code|tablica_obiektow_strony_dany_modul}} - tabela kodów bazy: {{Code|{{m|Szablonowe}}}}, * {{Code|dokumentacja}} - jeśli {{Code|true}}, wtedy kodowanie nie nastąpi, * {{Code|czy_nie_opis}} - czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu_caly}} - przetwarzaany tekst, * {{Code|nazwa_modulu}} - nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}, * {{Code|tablica_obiektow_strony_dany_modul}} - tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_modulu}} - nazwa modułu, jako uchwyt, z którego uzyskujemy tablicę parametrów: {{Code|tablica_danych_parametrow_szablonu_strony}}. Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_szablonu}} - nazwa szablonu do rozwinięcia, * {{Code|nazwa_modulu}} - nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy tego modułu,jak wyżej, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie, * Gdy tą funkcją jest {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: ** {{Code|czy_uwzgledniac_modyfikatory}} - czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}, Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_szablonu}} - nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}: * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy tego modułu,jak wyżej, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie. : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> trdcnr7qpsc2nxs0ssypmj6hpc3jse3 558268 558267 2026-10-02T10:37:20Z Persino 2851 /* {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} */ 558268 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana, * {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} - nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw, * {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} - przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony, * {{Code|inkludowana}} {{Patrz|inkludowana}} - przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej, * Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} - funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} - jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować, ** {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} - funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}, ** Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}: *** {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} - funkcja, np. dekodująca nazwę szablonu, *** {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} - funkcja, np. rozwijająca nazwę szablonu, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - funkcja do modyfikacji tekstu pobranego ze strony, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcje do generowania tablicy bazy kodów. Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst}} - przetwarzany tekst, * {{Code|nazwa_modulu}} - nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}, * {{Code|tablica_obiektow_strony_dany_modul}} - tabela kodów bazy: {{Code|{{m|Szablonowe}}}}, * {{Code|dokumentacja}} - jeśli {{Code|true}}, wtedy kodowanie nie nastąpi, * {{Code|czy_nie_opis}} - czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu_caly}} - przetwarzaany tekst, * {{Code|nazwa_modulu}} - nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}, * {{Code|tablica_obiektow_strony_dany_modul}} - tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_modulu}} - nazwa modułu, jako uchwyt, z którego uzyskujemy tablicę parametrów: {{Code|tablica_danych_parametrow_szablonu_strony}}. Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_szablonu}} - nazwa szablonu do rozwinięcia, * {{Code|nazwa_modulu}} - nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy tego modułu,jak wyżej, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie, * Gdy tą funkcją jest {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: ** {{Code|czy_uwzgledniac_modyfikatory}} - czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}, Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|nazwa_szablonu}} - nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}: * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tablica kodów bazy tego modułu,jak wyżej, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie. : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 93si7eqvv4thuerv8ccu5bhtbeah0wz 558272 558268 2026-10-02T11:22:52Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558272 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _3 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | {{Code|inkludowana}} {{Patrz|inkludowana}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 5 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | komórka5 = tak | 6 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _6 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 7 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _7 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 8 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _8 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 9 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka9 = tak | 10 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _10 = Funkcja, np. dekodująca nazwę szablonu. | 11 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. rozwijająca nazwę szablonu. | 12 = Inne: | komórka12 = tak | 13 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _13 = Funkcja do modyfikacji tekstu pobranego ze strony | 14 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _14 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. | 5 = {{Code|dokumentacja}} | _5 = Jeśli {{Code|true}}, wtedy kodowanie nie nastąpi. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Nazwa modułu, jako uchwyt, z którego uzyskujemy tablicę parametrów: {{Code|tablica_danych_parametrow_szablonu_strony}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Nazwa modułu w wersji szablonowej. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 3 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _3 = Tablica kodów bazy tego modułu,jak wyżej. | 4 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _4 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie, | 5 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka5 = tak | 6 = {{Code|czy_uwzgledniac_modyfikatory}} | _6 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 7 = {{Code|czy_z_kluczem}} | _7 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} | _3 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 4 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _4 = Nazwa modułu w wersji szablonowej. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Tablica kodów bazy tego modułu,jak wyżej. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> j8mltmi3fzd5gyeuk5bg9eeb7c197ou 558273 558272 2026-10-02T11:23:51Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558273 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _3 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 4 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 5 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | komórka5 = tak | 6 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _6 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 7 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _7 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 8 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _8 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 9 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka9 = tak | 10 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _10 = Funkcja, np. dekodująca nazwę szablonu. | 11 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. rozwijająca nazwę szablonu. | 12 = Inne: | komórka12 = tak | 13 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _13 = Funkcja do modyfikacji tekstu pobranego ze strony | 14 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _14 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. | 5 = {{Code|dokumentacja}} | _5 = Jeśli {{Code|true}}, wtedy kodowanie nie nastąpi. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Nazwa modułu, jako uchwyt, z którego uzyskujemy tablicę parametrów: {{Code|tablica_danych_parametrow_szablonu_strony}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Nazwa modułu w wersji szablonowej. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 3 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _3 = Tablica kodów bazy tego modułu,jak wyżej. | 4 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _4 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie, | 5 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka5 = tak | 6 = {{Code|czy_uwzgledniac_modyfikatory}} | _6 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 7 = {{Code|czy_z_kluczem}} | _7 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} | _3 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 4 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _4 = Nazwa modułu w wersji szablonowej. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Tablica kodów bazy tego modułu,jak wyżej. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> js0rapwvq9jso6seghgauxwzowsflye 558274 558273 2026-10-02T11:24:45Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558274 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _3 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 4 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 5 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek5 = tak | 6 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _6 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 7 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _7 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 8 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _8 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 9 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka9 = tak | 10 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _10 = Funkcja, np. dekodująca nazwę szablonu. | 11 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. rozwijająca nazwę szablonu. | 12 = Inne: | nagłówek12 = tak | 13 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _13 = Funkcja do modyfikacji tekstu pobranego ze strony | 14 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _14 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. | 5 = {{Code|dokumentacja}} | _5 = Jeśli {{Code|true}}, wtedy kodowanie nie nastąpi. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Nazwa modułu, jako uchwyt, z którego uzyskujemy tablicę parametrów: {{Code|tablica_danych_parametrow_szablonu_strony}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Nazwa modułu w wersji szablonowej. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 3 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _3 = Tablica kodów bazy tego modułu,jak wyżej. | 4 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _4 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie, | 5 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka5 = tak | 6 = {{Code|czy_uwzgledniac_modyfikatory}} | _6 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 7 = {{Code|czy_z_kluczem}} | _7 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} | _3 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 4 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _4 = Nazwa modułu w wersji szablonowej. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Tablica kodów bazy tego modułu,jak wyżej. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> d1hfgshucxhc5tf4jn231rr9tqugghe 558275 558274 2026-10-02T11:28:10Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558275 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|nazwa_modulu_szablonowa}} {{Patrz|nazwa_modulu_szablonowa}} | _3 = - | 4 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 5 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _5 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 6 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek6 = tak | 7 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _7 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 8 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _8 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 9 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _9 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 10 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka10 = tak | 11 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. dekodująca nazwę szablonu. | 12 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _12 = Funkcja, np. rozwijająca nazwę szablonu. | 13 = Inne: | nagłówek13 = tak | 14 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _14 = Funkcja do modyfikacji tekstu pobranego ze strony | 15 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _15 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. | 5 = {{Code|dokumentacja}} | _5 = Jeśli {{Code|true}}, wtedy kodowanie nie nastąpi. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, przetwarzany uchwyt, modułu: {{Code|{{ld2|Szablonowe}}}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Tabela kodów bazy: {{Code|{{m|Szablonowe}}}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Nazwa modułu, jako uchwyt, z którego uzyskujemy tablicę parametrów: {{Code|tablica_danych_parametrow_szablonu_strony}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Nazwa modułu w wersji szablonowej. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 3 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _3 = Tablica kodów bazy tego modułu,jak wyżej. | 4 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _4 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie, | 5 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka5 = tak | 6 = {{Code|czy_uwzgledniac_modyfikatory}} | _6 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 7 = {{Code|czy_z_kluczem}} | _7 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu_aktualna_czy_biezaca}} | _3 = Nazwa modułu, uchwyt do funkcji w {{Code|{{m|Szablonowe}}}}. | 4 = {{Code|nazwa_modulu_aktualna_czy_biezaca_szablonowa}} | _4 = Nazwa modułu w wersji szablonowej. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Tablica kodów bazy tego modułu,jak wyżej. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Tablica parametrów potrzebna do szybszego uzyskiwania parametrów z rozkłądów elementówna czynniki pierwsze niż normalnie. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nx0uvnhytiiseqrnp84e0523zamy8sc 558276 558275 2026-10-02T11:39:52Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558276 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|nazwa_modulu_szablonowa}} {{Patrz|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej, w wersji wywołaniowej. | 4 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 5 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _5 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 6 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek6 = tak | 7 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _7 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 8 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _8 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 9 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _9 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 10 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka10 = tak | 11 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. dekodująca nazwę szablonu. | 12 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _12 = Funkcja, np. rozwijająca nazwę szablonu. | 13 = Inne: | nagłówek13 = tak | 14 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _14 = Funkcja do modyfikacji tekstu pobranego ze strony | 15 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _15 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_obiektow_strony_dany_modul}}. | 5 = {{Code|dokumentacja}} | _5 = Jak w: {{LinkPatrz|dokumentacja}}. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_obiektow_strony_dany_modul}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 3 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _3 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 4 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _4 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. | 5 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka5 = tak | 6 = {{Code|czy_uwzgledniac_modyfikatory}} | _6 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 7 = {{Code|czy_z_kluczem}} | _7 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 4 = {{Code|nazwa_modulu_szablonowa}} | _4 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 602hdhb4zcxdylq1jq1wbx5bykn1ie4 558277 558276 2026-10-02T11:43:54Z Persino 2851 558277 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|nazwa_modulu_szablonowa}} {{Patrz|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej, w wersji wywołaniowej. | 4 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 5 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _5 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 6 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek6 = tak | 7 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _7 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 8 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _8 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 9 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _9 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 10 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka10 = tak | 11 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. dekodująca nazwę szablonu. | 12 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _12 = Funkcja, np. rozwijająca nazwę szablonu. | 13 = Inne: | nagłówek13 = tak | 14 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _14 = Funkcja do modyfikacji tekstu pobranego ze strony | 15 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _15 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Tablica danych bazy kodów zakodowanego tekstu. | 5 = {{Code|dokumentacja}} | _5 = Jak w: {{LinkPatrz|dokumentacja}}. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 3 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _3 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 4 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _4 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. | 5 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka5 = tak | 6 = {{Code|czy_uwzgledniac_modyfikatory}} | _6 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 7 = {{Code|czy_z_kluczem}} | _7 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 4 = {{Code|nazwa_modulu_szablonowa}} | _4 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_analizy_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tjustu4gxyl267x7h5krl4ofaszpd4o 558279 558277 2026-10-02T11:51:19Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558279 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|nazwa_modulu_szablonowa}} {{Patrz|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej, w wersji wywołaniowej. | 4 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 5 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _5 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 6 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek6 = tak | 7 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _7 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 8 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _8 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 9 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _9 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 10 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka10 = tak | 11 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. dekodująca nazwę szablonu. | 12 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _12 = Funkcja, np. rozwijająca nazwę szablonu. | 13 = Inne: | nagłówek13 = tak | 14 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _14 = Funkcja do modyfikacji tekstu pobranego ze strony | 15 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _15 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Tablica danych bazy kodów zakodowanego tekstu. | 5 = {{Code|dokumentacja}} | _5 = Jak w: {{LinkPatrz|dokumentacja}}. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _5 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. | 6 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka6 = tak | 7 = {{Code|czy_uwzgledniac_modyfikatory}} | _7 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 8 = {{Code|czy_z_kluczem}} | _8 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 4 = {{Code|nazwa_modulu_szablonowa}} | _4 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_analizy_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> arvuzlbzed982g1a9gy75phpzjaupf3 558280 558279 2026-10-02T11:53:42Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558280 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|nazwa_modulu_szablonowa}} {{Patrz|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej, w wersji wywołaniowej. | 4 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 5 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _5 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 6 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek6 = tak | 7 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _7 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 8 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _8 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 9 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _9 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 10 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka10 = tak | 11 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. dekodująca nazwę szablonu. | 12 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _12 = Funkcja, np. rozwijająca nazwę szablonu. | 13 = Inne: | nagłówek13 = tak | 14 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _14 = Funkcja do modyfikacji tekstu pobranego ze strony | 15 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _15 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Tablica danych bazy kodów zakodowanego tekstu. | 5 = {{Code|dokumentacja}} | _5 = Jak w: {{LinkPatrz|dokumentacja}}. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}}. | _5 = Tabela parametrów potrzebna do szybszego działania '''{{ld|StronicowyParser|Stronicowego parsera}}'''. | 6 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka6 = tak | 7 = {{Code|czy_uwzgledniac_modyfikatory}} | _7 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 8 = {{Code|czy_z_kluczem}} | _8 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu_aktualna_czy_biezaca,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 4 = {{Code|nazwa_modulu_szablonowa}} | _4 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_analizy_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ryc3by1x982iui9jb7vzikkqct1ye7d 558281 558280 2026-10-02T11:57:34Z Persino 2851 /* {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} */ 558281 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Tekst}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.SpreparowanyWikikodStrony}}{{Code|p.SpreparowanyWikikodStrony}} == Funkcja sciagące opisy szablonów ze strony szablonów, nie opisów, czy ze strony modułów ich opisy, a jeżeli tego opisu nie ma, to funkcja zwraca wartość {{Code|nil}}. A jeżeli tego nie ma w przypadku szablonów, to opisy z parametru {{Parametr|zawartość}} z wywołania: {{s|Dokumentacja|zawartość{{=}}...}}. Funkcja też ściąga zawartości stron szablonów, jeżeli na stronie szablonu jest szablon jego opisu, np. w postaci: {{Code|{{s|Nazwa szablonu/opis}}}}, to wtedy uzyskujemy jego zawartość w wyniku. Ma możliwości ściągania zawartości stron, jeżeli one istnieją, z innych przestrzeni nazw. Jest to szablon ogólny do ogólnego ścigania stron z różnych przestrzeni, w takim przypadku nie ma potrzeby ściągania zawartości stron, tworząc skomplikowany algorytm dla każdego typu przestrzeni i zawartości, wystarczy ta funkcja. Funkcja w opisach szablonów, a w niej instrukcje warunkowe podczas kodowania są rozwijane przy pomocy funkcji: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}}, a normalnie, gdy wewnątrz instrukcji warunkowych nie ma klamerek w funkcji, w składowej funkcji, tzn.: {{LinkPatrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SpreparowanyWikikodStrony(self,nazwa_modulu,nazwa_modulu_szablonowa,dokumentacja,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA5,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Funkcja korzysta bezpośrednio z funkcji: {{LinkŚródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}. Parametry funkcji: {{OpisParametrów | 1 = {{Code|self}} {{LinkPatrz|self}} | _1 = Parametr obiektowy funkcji, potrzebne do tabeli błędów w funkcji najważniej, która jest wykorzystywana. | 2 = {{Code|nazwa_modulu}} {{Patrz|nazwa_modulu}} | _2 = Nazwa strony szablonu, modułu lub ich opisów, i stron w innych przestrzeniach nazw. | 3 = {{Code|nazwa_modulu_szablonowa}} {{Patrz|nazwa_modulu_szablonowa}} | _3 = Nazwa modułu w wersji szablonowej, w wersji wywołaniowej. | 4 = {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} | _4 = Przy wartości {{Code|true}}, tego parametru, wtedy funkcja nie koduje wewnętrznie przetwarzanej strony. | 5 = {{Code|inkludowana}} {{Patrz|inkludowana}} | _5 = Przy wartości {{Code|true}}, tego parametru, wtedy strona zachowuje się jak inkludowana, przeciwny parametr do {{Code|czy_noinclude}}, jak w funkcji powyżej. | 6 = Twory funkcyjne lub przyjmowane wartości {{Code|nil}}, zatem: | nagłówek6 = tak | 7 = {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-SpreparowanyWikikodStrony}} | _7 = Funkcja przekształcające podany tekst, robiąc na nim pewne operacje, na samym końcu przetwarzania, po kodowaniu, jeśli istnieje, przed samym zwróceniem wyniku. | 8 = {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-SpreparowanyWikikodStrony}} | _8 = Jeśli {{Code|dokumentacja}}{{=}} {{Code|true}} - wtedy ta funkcja jest używana do sprawdzenia, czy dany tekst, w końcowym etapie, kodować. | 9 = {{Code|__FUNKCJA3}} {{Patrz|__FUNKCJA3-SpreparowanyWikikodStrony}} | _9 = Funkcja uzyskująca tablicę danych parametrów rozkładania tworów szablonowych w {{Code|{{m|Szablonowe}}}}. | 10 = Funkcje używane w funkcji, potrzebne do konstrukcji funkcji przyjmowanych w: {{Code|{{sr|#p["UstalanieNazwyWywołania"]|p=Szablonowe}}}} {{Patrz|UstalanieNazwyWywołania}}:| komórka10 = tak | 11 = {{Code|__FUNKCJA4}} {{Patrz|__FUNKCJA4-SpreparowanyWikikodStrony}} | _11 = Funkcja, np. dekodująca nazwę szablonu. | 12 = {{Code|__FUNKCJA5}} {{Patrz|__FUNKCJA5-SpreparowanyWikikodStrony}} | _12 = Funkcja, np. rozwijająca nazwę szablonu. | 13 = Inne: | nagłówek13 = tak | 14 = {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} | _14 = Funkcja do modyfikacji tekstu pobranego ze strony | 15 = {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} | _15 = Funkcje do generowania tablicy bazy kodów. }} Definicje funkcji: {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-UstalanieNazwyWywołania}} i {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-UstalanieNazwyWywołania}}, które są potrzebne do konstrukcji wywołania funkcji: {{LinkPatrz|UstalanieNazwyWywołania}}, uzyskiwania nazwy szablonu i jego modyfikatorów, względem tej funkcji w nagłówku ze zmiennymi: {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} i {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}}, definicje tych funkcji: * {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA=function(nazwa_szablonu) if(__FUNKCJA4)then return __FUNKCJA4(nazwa_szablonu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory]]); end; end; </syntaxhighlight> * {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-UstalanieNazwyWywołania}}: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(nazwa_szablonu,tabela_modyfikatorow) return __FUNKCJA5 and __FUNKCJA5(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nazwa_szablonu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(tekst,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,dokumentacja,czy_nie_opis) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{Patrz|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Tablica danych bazy kodów zakodowanego tekstu. | 5 = {{Code|dokumentacja}} | _5 = Jak w: {{LinkPatrz|dokumentacja}}. | 6 = {{Code|czy_nie_opis}} | _6 = Czy to nie jest opis szablonu, czy modułu, wtedy ta zmienna powinna przyjmować wartość {{Code|true}}, w przeciwnym razie {{Code|false}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> tekst_artykulu_caly=__FUNKCJA and __FUNKCJA(tekst_artykulu_caly,nazwa_modulu,nil,dokumentacja,true) or tekst_artykulu_caly; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(tekst_artykulu_caly,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_artykulu_caly}} | _1 = Przetwarzany tekst. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> if(dokumentacja and ((not __FUNKCJA2) and true or __FUNKCJA2(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul)))then tekst_artykulu_caly=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu_caly,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA3}} {{LinkPatrz|__FUNKCJA3-SpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA3=function(nazwa_modulu,nazwa_modulu_szablonowa) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_modulu}} | _1 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 2 = {{Code|nazwa_modulu_szablonowa}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. }} Przykłady użycia: <syntaxhighlight lang="lua"> local tablica_danych_parametrow_szablonu_strony=__FUNKCJA3 and __FUNKCJA3(nazwa_modulu) or nil; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA4}} {{LinkPatrz|__FUNKCJA4-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local __FUNKCJA4=function(nazwa_szablonu,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony--[[,czy_uwzgledniac_modyfikatory,czy_z_kluczem]]) ... --- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinięcia. | 2 = {{Code|nazwa_modulu}} | _2 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 3 = {{Code|nazwa_modulu_szablonowa}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 4 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _4 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 5 = {{Code|tablica_danych_parametrow_szablonu_strony}} {{Patrz|tablica_danych_parametrow_szablonu_strony}}. | _5 = Tabela parametrów potrzebna do szybszego działania '''{{ld|StronicowyParser|Stronicowego parsera}}'''. | 6 = Gdy tą funkcją jest: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}}, ta zmienna bezpośrednio w: {{Code|__FUNKCJA4}}, nie występuje, ale za to występuje w tej podanej szczególnej przykładowej funkcji: | komórka6 = tak | 7 = {{Code|czy_uwzgledniac_modyfikatory}} | _7 = Czy ma uwzględniać modyfikatory, pierwsza zwracana zmienna jest: {{Code|nil}}, a druga: {{Code|false}}. | 8 = {{Code|czy_z_kluczem}} | _8 = Czy klucze, o wzorze: {{Code|klucz}}, lub {{Code|klucz[1-9]%d*}}. }} Jeżeli w funkcji {{LinkPatrz|DekodowanieNazwySzablonu-SpreparowanyWikikodStrony}} nie wykryto kodów, to ona zwraca wartość pierwszą: {{Code|nil}}, drugą: {{Code|true}}. Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}} w przeciwnym wypadku zwracane jest nazwa szablonu i wartość {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA4=stronicowyparser_potrzebne_modul.DekodowanieNazwySzablonu; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA5}} {{LinkPatrz|__FUNKCJA5-SpreparowanyWikikodStrony}} ma np. definicję: <syntaxhighlight lang="lua"> local=__FUNKCJA5=function(nazwa_szablonu,tabela_modyfikatorow,nazwa_modulu,nazwa_modulu_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|nazwa_szablonu}} | _1 = Nazwa szablonu do rozwinicia po rozwinięciu przez funkcję: {{Code|__FUNKCJA4}}. | 2 = {{Code|tabela_modyfikatorow}} | _2 = Tabela modyfikatorów uzyskana podczas rozkładu na modyfikatory i nazwę szablonu, jeżeli funkcja ma modyfikatory warunkowe, czy jest szablonem, to jest zwracana wartość pierwsza: {{Code|nil}}, druga: {{Code|false}}, w przypadku: {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}. | 3 = {{Code|nazwa_modulu}} | _3 = Jak w: {{LinkPatrz|nazwa_modulu}}. | 4 = {{Code|nazwa_modulu_szablonowa}} | _4 = Jak w: {{LinkPatrz|nazwa_modulu_szablonowa}}. | 5 = {{Code|tablica_analizy_obiektow_strony_dany_modul}} | _5 = Jak w: {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul}}. | 6 = {{Code|tablica_danych_parametrow_szablonu_strony}} | _6 = Jak w: {{LinkPatrz|tablica_danych_parametrow_szablonu_strony}}. }} : Gdy tą funkcją jest: {{Code|{{sr|#p.RozwijanieZakodowanejNazwySzablonu|p=StronicowyParser/Potrzebne}}}} {{Patrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}: :: Na samym końcu funkcji jest wykonywane polecenie: {{Code|frame:preprocess}}, z korzystanej funkcji: {{Code|{{sr|#p.DekodowanieNazwySzablonu|p=StronicowyParser/Potrzebne}}}}, z której korzysta {{LinkPatrz|RozwijanieZakodowanejNazwySzablonu-SpreparowanyWikikodStrony}}, jeżeli z korzystanej tutaj funkcji zrzuciło to niepowodzenie, to pierwsza wartość zwrótcone to: {{Code|nil}}, druga: {{Code|false}}, w przeciwnym wypadku zwraca nazwę rozwiniętego szablonu i wartość: {{Code|true}}. Przykłady użycia: <syntaxhighlight lang="lua"> local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local __FUNKCJA5=stronicowyparser_potrzebne_modul.RozwijanieZakodowanejNazwySzablonu; </syntaxhighlight> == {{Code|p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} == Ogólna funkcja do rozwijania wikikodów, w których mieszczą się wywołania szablonowe bezparametrowe, z nazwami artykułów książkowych (według funkcji: {{Code|{{sr|#m["NAZWAARTYKUŁUKSIĄŻKI"]|p=Nazwy/Tom IV}}}}) niepustych, te które należy rozwinąc, lub jeszcze bardziej, jeżeli ich format jest podobny, co ich rodzice: ; Przechodząc do wywołań szablonowych w końcu zagnieżdżonych, w wikikodzie w szablonie, wtedy{{dk}} {{nobold|{{Code|czy_niezakodowana{{=}}czy_nie_opis{{=}}true}}}}, według funkcji{{dk}} * {{Code|{{sr|#p.RozwijanieNiezakodowanegoSzablonu|p=Szablonowe}}}}, gdy to jest zwykła przestrzeń nazw plus przestrzeń modułów, ; W przypadku szablonów opisów i szablonów nie opisów jest za to używana funkcja: * {{Code|{{sr|#p.RozwijanieZakodowanegoSzablonu|p=Szablonowe}}}}, bo prawie zawsze w tym przypadku mamy do czynienia z opisami. : Te funkcje są wywoływane wewnątrz funkcji: {{LinkŚródtytuł|p.SpreparowanyWikikodStrony}}. Np. na stronie znajduje się wywołanie szablonowe '''spisu treści''', które w tym wikikodzie należy rozwinąc za pomocą kodowania szablonowego, by można w tak uzyskanym teście z kodami oraz tabelą kodów bazy i tabelą parametrów wykorzystać w innym elemencie w kodzie {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.RekurencyjnyZakodowanoSpreparowanyWikikodStrony(self,nazwa_modulu_aktualna_czy_biezaca,nazwa_modulu_aktualna_czy_biezaca_szablonowa,inkludowana,__FUNKCJA,__FUNKCJA2,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji: * {{Code|self}} {{LinkPatrz|self}} - zmienna obiektowa, * {{Code|nazwa_modulu_aktualna_czy_biezaca}} - strona o nazwie modułu do rozwinięcia i zakodowania, * {{Code|inkludowana}} {{LinkPatrz|inkludowana}} - zmienna, czy strona ma być interpretowana jako inkludowana, * Zmienne funkcyjne: ** {{Code|__FUNKCJA}} {{Patrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja generująca zawartość, może być zmodyfikowana, na podstawie pełnej nazwy strony, używana w funkcji: jest to {{Code|__FUNKCJA3}} w: {{Code|{{sr|#FunkcjaIterajacaRozwijanegoSzablonu|p=Szablonowe}}}} {{Patrz|__FUNKCJA-FunkcjaIterajacaRozwijanegoSzablonu}}, ** {{Code|__FUNKCJA2}} {{Patrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} - funkcja do generowania zawartości, może być zmodyfikowana, według podanej jej wartości, używana w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|FUNKCJA2-KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, w postaci zmodyfikowanej, czyli w wersji: {{Code|__FUNKCJA2}}, ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}} - inne operacje wykonywane na pobranym tekście, ** {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}} - funkcja użyta do generowania tablicy bazy kodów. Funkcje {{Code|__FUNKCJA_ANALIZA_SPISOWA}} i {{Code|__FUNKCJA_PARAMETRY}}, zostały już opisane w tym module, więc wystarczy opisać inne. {{Hr}} * Funkcja {{Code|__FUNKCJA}} {{LinkPatrz|__FUNKCJA-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA=function(pelna_nazwa_szablonu,tabela_parametrow_szablonu,tabela_modyfikatorow) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|pelna_nazwa_szablonu}} - pełna nazwa szablonu, * {{Code|tabela_parametrow_szablonu}} - tabela parametrów wywołania szablonu do rozwinięcia, * {{Code|tabela_modyfikatorow}} - tabela modyfikatorów danego wywołania szablonowego. {{Hr}} * Funkcja {{Code|__FUNKCJA2}} {{LinkPatrz|__FUNKCJA2-RekurencyjnyZakodowanoSpreparowanyWikikodStrony}} ma definicję: <syntaxhighlight lang="lua"> local __FUNKCJA2=function(szablon,obiekt,kod,tekst,numer_szablonu,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) ... ---- ciało funkcji; end; </syntaxhighlight> Parametry funkcji: * {{Code|szablon}} - zawartość elementu wikikodu według {{Code|{{m|Szablonowe}}}}, * {{Code|obiekt}} - nazwa obiektu szablonowego, jak: {{Code|SZABLON}}, * {{Code|kod}} - numer obiektu, * {{Code|tekst}} - tekst całego artykułu, * {{Code|numer_szablonu}} - tabela numerów dla różnych obiektów w jednej tabeli, * {{Code|tablica_analizy_obiektow_strony_dany_modul}} - tabela bazy danych obiektów tekstu, * {{Code|tablica_danych_parametrow_szablonu_strony}} - tabela danych parametrów rozkładanych szablonów i znaczników w zakodowanym tekście, dla poszczególnych elementów kodowych. == {{Śródtytuł|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}}{{Code|p.PobierzSpecjalniePrzygotowanyPreWikikodStrony}} == Funkcja służy dościągania zawartości stron z zawartością, a jeżeli zaawartości nie ma, to ona zwraca wartość {{Code|nil}}. Posiada własną walidacje nazwy stron, czy ona jest prawidłowa. Funkcja pseudoszablony nazw zastępuje odpowiednimi policzonymi lub podanymi nazwami. Rozwija instrukcje warunkowe wwedług ściśle określonych sposobów. Funkcja odpowiednio operuje na znacznikach wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''', tzn. {{Tag|includeonly}} i {{Tag|noinclude}}, pozostawiając zawartość lub całość, usuwając je z tekstu, to też zależy od parametrów. Funkcja usuwa zawartość, wraz z nim, znacznika {{Tag|templatedata}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY)...end; </syntaxhighlight> Parametry funkcji podane w kolejności ich wsadzania do niej,one podaje się po kolei, a dalsze parametry nie podajemy, wtedy one są równe {{Code|nil}}: * Zmienne obiektowe: ** {{Code|self}} {{Patrz|self}} - zmienna tworząca obiekty w języku {{lpg|Lua}} w {{lpr|Lua|Scribunto}}. Tę funkcję np. można uruchomić poprzez, pisząc ogólnie: *** {{Code|p:PobierzSpecjalniePrzygotowanyPreWikikodStrony(nazwa_strony,nazwa_strony2,czy_noinclude,szablony_magiczne,dokumentacja,czy_szablon,nazwa_modulu_szablonu_opisu,szablon_nie_opis,__FUNKCJA_ANALIZA_SPISOWA,__FUNKCJA_KOMENTARZE,__FUNKCJA_KONTROLNE,__FUNKCJA_PARAMETRY);}}, gdzie {{Code|p}} - to odpowiednia zmienna. * Zwykłe zmienne: ** {{Code|nazwa_strony}} {{Patrz|nazwa_strony}} - nazwa strony, której liczymy zawartość, używając funkcji: {{Code|mw.title.makeTitle}}, strona może nie istnieć, ** {{Code|nazwa_strony2}} {{Patrz|nazwa_strony2}} - uchwyt zapamiętywania w bazie modułu: {{Code|{{m|Szablonowe}}}}, według ustalanej w funkcji: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe}}}}, w jego zmiennej {{Code|self}} parametrowej, ** {{Code|czy_noinclude}} {{Patrz|czy_noinclude}} - jeśli odpowiada wartości prawdziwej, wtedy znaczniki: {{Tag|noinclude}} i {{Tag|includeonly}}, zachowują się, jakby były nieinkludowane, w przeciwnym wypadku ta zmienna działa dla tych wbudowanych znaczników, jakby strona była nie taka, * Zmienna tablicowa: ** {{Code|szablony_magiczne}} {{Patrz|szablony_magiczne}} - tablica zmiennych i ich wartości, zawartych elementów na stronie, w której są zawarte pseudoszablony, które w tekście są traktowane jako pewne zmienne,które obliczamy za pomocą tej zmiennej funkcyjnej, * Inne zmienne ** {{Code|dokumentacja}} {{Patrz|dokumentacja}} - określa, że tekst jest w trybie dokumentacji, wtedy on nie jest kodowany funkcjami: {{Code|{{m|Szablonowe}}}}, ** {{Code|czy_szablon}} {{Patrz|czy_szablon}} - gdy {{Code|nil}}, wtedy funkcja rozważa na: {{Tag|noinclude}} i {{Tag|includeonly}}, w przeciwnym wypadku to ona, która zamiast tego modyfikuje tekst w postaci wywołania: {{Code|tekst_artykulu{{=}}czy_szablon(tekst_artykulu,czy_noinclude)}}, czyli wtedy ona jest funkcją, ** {{Code|nazwa_modulu_szablonu_opisu}} {{Patrz|nazwa_modulu_szablonu_opisu}} - zmienne do obliczania tablicy {{Code|szablony_magiczne}}, która jest awaryjną nazwą strony, w przeciwnym wypadku dla tej tablicy jest używana zmienna: {{Code|nazwa_strony}}, z zamienionymi kodami '''{{lpg|HTML}}''' na znaki, ** {{Code|szablon_nie_opis}} {{Patrz|szablon_nie_opis}} - zmienna wskazująca, czy {{Code|nazwa strony}} {{LinkPatrz|nazwa strony}} wsskazuje na szablon, który nie jest opisem, wtedy tekst nie jest kodowwany,uzywany wraz ze zmienną: {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}}, * Zmienne funkcyjne, które równie dobrze mogą przyjmować wartość {{Code|nil}}, wtedy jest przyjmowana wartość: {{Code|tekst_artykulu}} {{Patrz|tekst_artykulu}}, jeżeli one mają wartość funkcyjną, te funkcje też mogą zwracać tą wartość, w takim przypadku brana jest ta wartość, którą pierwotnie chceliśmy przekształcać, w innym wypadku zwracana jest przetransformowana wartość operowana, zatem: ** {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{Patrz|__FUNKCJA_ANALIZA_SPISOWA}} - operacje inne niż w: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}} i {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}, ** {{Code|__FUNKCJA_KOMENTARZE}} {{Patrz|__FUNKCJA_KOMENTARZE}} - funkcja operującana komentarzy, przeciwnie jest używana funkcja: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}, gdzie: {{Code|techniczne_modul{{=}}require("Module:Techniczne");}}, ** {{Code|__FUNKCJA_KONTROLNE}} {{Patrz|__FUNKCJA_KONTROLNE}} - funkcja usuwająca znaki kontrolne z tekstu takie jak: {{Code|<nowiki>%c</nowiki>}}, lub jemu podobne, np. znaki składające się z wielu bajtów, ** {{Code|__FUNKCJA_PARAMETRY}} {{Patrz|__FUNKCJA_PARAMETRY}} - funkcja do rozważania parametry w samej funkcji kodowaniana poziomie tablicy bazy kodów: {{Code|tablica_analizy_obiektow_strony_dany_modul}}, wewnątrz funkcji kodującej w module: {{Code|{{m|Szablonowe/Potrzebne}}}}, czyli w: {{Code|{{sr|#p.KodowanieSzablonowegoTekstuZObiektamiWikikodu|p=Szablonowe/Potrzebne}}}} {{Patrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}. Przykłady wywołań w innych funkcjach: <syntaxhighlight lang="lua"> local tekst=p.PobierzSpecjalniePrzygotowanyPreWikikodStrony(self,nazwa_modulu_opisu,nazwa_modulu,false,nil,dokumentacja,false,nil,nil,__FUNKCJA_ANALIZA_SPISOWA,nil,nil,__FUNKCJA_PARAMETRY); </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, operuje kodem na podstawie podanych parametrów, jego przykładowy ogólny kod: <syntaxhighlight lang="lua"> local __FUNKCJA_ANALIZA_SPISOWA=function(tekst_artykulu,nazwa_modulu_szablonu_opisu,nazwa_strony_bez_kodow_html,szablony_magiczne,tabela_nazw) .... end; </syntaxhighlight> Parametry funkcji: * {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} - tekst do analizy, jak w funkcji nadrzędnej, * {{Code|nazwa_modulu_szablonu_opisu}} {{LinkPatrz|nazwa_modulu_szablonu_opisu}} - nazwa strony potrzebna do ustalania wartości nazw do tworzenia dalszego zmiennej {{Code|szablony_magiczne}}, w przeciwnym wypadku brana jest wartość: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * {{Code|nazwa_strony_bez_kodow_html}} {{Patrz|nazwa_strony_bez_kodow_html}} - jest to nazwa strony: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, tylko z kodami '''{{lpg|HTML}}''' zamienionymi na ich odpowiedniki znakowe, * {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}} - tabela pseudoszablonów z ich wartościami ustalonymi, jak powyżej, * {{Code|tabela_nazw}} {{Patrz|tabela_nazw}} - tabela nazw obsługiwane przez funkcje nazw według: {{Code|{{ld2|Nazwy}}}}, używana też do ustalania zmiennej: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, wewnątrz tej funkcji nadrzędnej. {{Hr}} Funkcja: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, ma przykładowy kod, który zamienia komentarze na pewne kody liczone funkcją: {{Code|{{sr|#p.NormaKoduKodowaniaTekstu|p=Szablonowe}}}}: <syntaxhighlight lang="lua"> local __FUNKCJA_KOMENTARZE=function(tekst_artykulu) tekst_artykulu=p.UsuwanieKomentarzowe(tekst_artykulu,function(komentarz) local kod=szablonowe_modul.NormaKoduKodowaniaTekstu("KOMENTARZ",licznik_komentarze); tab_komentarze[licznik_komentarze]=komentarz; licznik_komentarze=licznik_komentarze+1; return kod; end); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja {{Code|__FUNKCJA_KONTROLNE}}, która usuwa znaki kontrolne, definicja: <syntaxhighlight lang="lua"> local __FUNKCJA_KONTROLNE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(%c)",""); return tekst_artykulu; end; </syntaxhighlight> {{Hr}} Funkcja: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}, ma mniej więcej kod, który służy do modyfikacji elementów tablicy {{Code|tablica}}: <syntaxhighlight lang="lua"> local __FUNKCJA_PARAMETRY=function(obiekt) return function(tablica,klucz,wartosc_tablicy,czy_wartosc_tablicy_nil--[[ten element przyjmuje wtedy wartość: true, w przeciwnym wypadku false]]) ... --- ciało funkcji operującej na tablicy: tablica; end; end; </syntaxhighlight> Tablica {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt]}} jest tablicą zawsze pustą, do niej dla każdego obiektu {{Code|obiekt}} przywiązana jest tablica, którą zapełaniamy elementami, modyfikującego tablicę: {{Code|tablica}}, w funkcji zwracanej przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. Jak piszemy {{Code|tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]}}, wtedy modyfikujemy tą drugą tablicę lub uzyskujemy dane z niej, oto przykład: <syntaxhighlight lang="lua"> tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]="{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; local szablon=tablica_analizy_obiektow_strony_dany_modul["SZABLON"][1]; ---- Wartość zmiennej: szablon, jest: "{{Zawartość|parametr1=wartość1|parametr2=wartość2}}"; </syntaxhighlight> A dokładnie, podczas tych podstawień w tablicę i jej zmiany, wykonywany był kod metatabelki {{lpg|Lua}} w {{lpr|Lua|Scribunto}}: <syntaxhighlight lang="lua"> __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; </syntaxhighlight> A {{Code|__metatablica}} {{Patrz|__metatablica}}, to metatabelka, a {{Code|__FUNKCJA}} jest to funkcja zwracana przez: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. === Kolejność wywoływania elementów funkcji === Ten rozdział zawiera kolejność wywołań poszczególnych kroków w funkcji. ==== Poprawność pewnych nazw ==== * Sprawdzana jest, czy strona składa się z samych znaków odstępów lub dolnych myślników, * Wywoływana jest funkcja: {{Code|{{sr|#p["TransformacjaKlasyZnakowejDoKoduHtmlCiągu"]|p=Html}}}}, która z: {{Code|nazwa_strony}} {{LinkPatrz|nazwa_strony}}, liczy: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, * Sprawdzana jest poprawność nazwy według: {{Code|{{sr|#p.CzyNiepoprawnaNazwa|p=Pudełko/Tom I}}}}, ze zmiennej: {{Code|nazwa_strony_bez_kodow_html}} {{LinkPatrz|nazwa_strony_bez_kodow_html}}, a jeżeli ona zawiera błędy, wtedy są zapisywane błędy w tabeli błędów i zwracana jest wartość {{Code|nil}}, te błędy mogą być wykorzystane przez moduł: {{Code|{{ld2|StronicowyParser/Kategorie}}}}. ==== Parametry uzyskanej strony ==== * Aby uzyskać parametry strony uruchamiamy: {{Code|{{sr|#p.CzyStronaIstniejeJejParametry|p=Techniczne}}}}, i z niej uzyskujemy wartości w postaci osobnych zwracanych zmiennych: {{Code|uchwyt strony}} {{Patrz|uchwyt strony}}, {{Code|tekst_artykulu}} {{LinkPatrz|tekst_artykulu}} i {{Code|czy_istnieje}} {{Patrz|czy_istnieje}}, jeżeli uchwyt jest nieprawidłowy, zawartość nie istnieje lub strona nie istnieje, wtedy błędy są zapisywane w tabeli błędów. ==== Składniki preprocesora kodu mechanizmu: {{nobold|{{NS|l=tak|k=mw|w=tak}}}} ==== * Gdy {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}} {{=}} {{Code|nil}}: ** Jeśli: {{Code|czy_noinclude}} {{LinkPatrz|czy_noinclude}}, przyjmuje wartość {{Code|true}}, wtedy zawartość strony nie jest inkludowana, w przeciwnym wypadku jest przeciwnie. Ze strony są usuwane pozostałości ze znaczników wbudowanych w '''mechanizm {{NS|l=tak|k=mw|w=tak}}''' i znaczników jak {{Tag|templatedata}}, * Przeciwna wypadek: wtedy: {{Code|czy_szablon}} {{LinkPatrz|czy_szablon}}, jest funkcją, wtedy wywoływana jest wtedy ona, ** W przeciwnie: żadne operacje w tym przypadku nie są robione. ==== Komentarze ==== * Usuwane są komentarze funkcją: {{Code|__FUNKCJA_KOMENTARZE}} {{LinkPatrz|__FUNKCJA_KOMENTARZE}}, a jeżeli ona nie istnieje, wtedy uruchamiana jest: {{Code|{{sr|#p.UsuwanieKomentarzowe|p=Techniczne}}}}. ===== Usuwanie pseudoszablonówi niektporych instrukcji warunkowych ===== * Ustawiane są zmienne w: {{Code|szablony_magiczne}} {{LinkPatrz|szablony_magiczne}}, jeżeli nie jest ta wartość równa wartości odpowiadającej fałszywej, na podstawie tabeli: {{Code|tabela_nazw}} {{LinkPatrz|tabela_nazw}}, ** Usuwane są pseudoszablony, dalej jest uruchamiana funkcja: {{Code|{{sr|#p.InstrukcjeWarunkowe|p=Ramka}}}} {{Patrz|InstrukcjeWarunkowe-PobierzSpecjalniePrzygotowanyPreWikikodStrony}}, by usunąc różne instrukcje warunkowe. ==== Specjalne elementy zmieniające wikikod ==== * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_ANALIZA_SPISOWA}} {{LinkPatrz|__FUNKCJA_ANALIZA_SPISOWA}}, * Uruchamiana, jeśli istnieje, funkcja: {{Code|__FUNKCJA_KONTROLNE}} {{LinkPatrz|__FUNKCJA_KONTROLNE}}. ==== Kodowanie bazy danych kodów {{nobold|{{Code|{{m|Szablonowe}}}}}} ==== * Jeśli: {{Code|szablon_nie_opis}} {{LinkPatrz|szablon_nie_opis}} {{=}} {{Code|false}} i {{Code|dokumentacja}} {{LinkPatrz|dokumentacja}} {{=}} {{Code|false}}, wtedy jest uruchamiana funkcja: {{LinkPatrz|KodowanieSzablonowegoTekstuZObiektamiWikikodu}}, z parametrem funkcyjnym, jeśli jest, o nazwie: {{Code|__FUNKCJA_PARAMETRY}} {{LinkPatrz|__FUNKCJA_PARAMETRY}}. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> avcvbesu424p3ygeylw3elgtnfbiuxa Wikibooks:Moduły/StronicowyParser/SpisTreści/Tom II 4 63661 558236 554487 2026-10-01T20:33:23Z Persino 2851 558236 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. nzz {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 4 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> ajtp5qkjshlrodojknjsu47of2ipf7d 558237 558236 2026-10-01T20:34:19Z Persino 2851 /* Opis funkcji */ 558237 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> 8tvr3ekhe5agcrwmq7gnjnce6j9n4a6 558238 558237 2026-10-01T20:41:32Z Persino 2851 /* {{Śródtytuł|Spis}}{{Code|Spis}} */ 558238 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> 3y36hj9fkcj79q3a0qitzdslvd47j99 558239 558238 2026-10-01T20:43:23Z Persino 2851 /* {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} */ 558239 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> m2paj65gb8sa4vmjjrgeqw4c682h4rb 558240 558239 2026-10-01T20:44:45Z Persino 2851 /* {{Śródtytuł|SpisRzeczy}}{{Code|SpisRzeczy}} */ 558240 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> ea4hwzoqcfuilbqghgbyfxpgtlzx8a2 558241 558240 2026-10-01T20:47:10Z Persino 2851 /* {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} */ 558241 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisPaarametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> erj3m3pre6yftumrv3704sd2tcgic5w 558242 558241 2026-10-01T20:47:38Z Persino 2851 /* {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} */ 558242 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisPaarametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} * {{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> iadvm2g7e6hcpbdn0t1zwzt9wgz3qbf 558243 558242 2026-10-01T20:51:05Z Persino 2851 /* Dalszy opis funkcji głównej */ 558243 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisPaarametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mql4dc24pq87d6yj8wwxfoucwaqg5yf 558244 558243 2026-10-01T20:54:39Z Persino 2851 /* {{Śródtytuł|WsadzanieParametryDoTablicy}}{{Code|WsadzanieParametryDoTablicy}} */ 558244 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _6 = Tabela innych spisów książki, jeżeli istnieją, | 7 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _7 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 8 = {{Code|numer}} {{Patrz|numer}} | _8 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dnjli0xul4oc8c35ha5brikatyps9wm 558245 558244 2026-10-01T20:56:56Z Persino 2851 /* {{Śródtytuł|Spis}}{{Code|Spis}} */ 558245 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}}, {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno nazwa przestrzeni nazw,nazwa przestrzeni książki i nazwa książki. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 ={{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = Inne parametry: | nagłówek6 = tak | 7 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _7 = Tabela innych spisów książki, jeżeli istnieją, | 8 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _8 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 9 = {{Code|numer}} {{Patrz|numer}} | _9 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> j2xw2ctm6zr4ec0q9v3mbbrmgnm3zc3 558246 558245 2026-10-01T21:02:33Z Persino 2851 /* Opis funkcji */ 558246 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzuca 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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno jak w: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 = {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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 przypisywania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = 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>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = Inne parametry: | nagłówek6 = tak | 7 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _7 = Tabela innych spisów książki, jeżeli istnieją, | 8 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _8 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 9 = {{Code|numer}} {{Patrz|numer}} | _9 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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: {{LzLua|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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> al06ui0uehpyin0r4slfvh1erf2vda8 558247 558246 2026-10-01T21:07:20Z Persino 2851 558247 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|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ł|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzuca 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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno jak w: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 = {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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 przypisywania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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 jednego 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = Jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli właśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = Inne parametry: | nagłówek6 = tak | 7 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _7 = Tabela innych spisów książki, jeżeli istnieją, | 8 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _8 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 9 = {{Code|numer}} {{Patrz|numer}} | _9 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{LinkPatrz|tab_inne_spisy}}, nie istnieje to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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 {{Code|tab_stare}} {{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ą pozycję, przy pomocy funkcji: {{LzLua|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzyskiwania 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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 określonej strony szablonu z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{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 {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}} oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}} i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> o680vo2defnnbr7xf15jrq14jzpkxrn 558254 558247 2026-10-01T23:02:58Z Persino 2851 558254 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|setmetatable}}. Iterujemy dla elementach tabeli: {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artykuł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 z definicji: {{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ł|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzuca 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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno jak w: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 = {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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 przypisywania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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 jednego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = Jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli właśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = Inne parametry: | nagłówek6 = tak | 7 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _7 = Tabela innych spisów książki, jeżeli istnieją, | 8 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _8 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 9 = {{Code|numer}} {{Patrz|numer}} | _9 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{Code|tab_inne_spisy}} {{LinkPatrz|tab_inne_spisy}}, nie istnieje, to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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: {{Code|tab_stare}} {{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ą pozycję, przy pomocy funkcji: {{LzLua|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzyskiwania 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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 treści, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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 określonej strony szablonu z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} 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: {{Code|strona}} {{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ę: {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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 strona jest 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy, mając przetwarzaną 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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ą wskazuje to przekierowanie, oznaczmy tą zmienną: {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} {{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: {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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łównej 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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ary14r8xvr25f59341xhw8maky0lcah 558255 558254 2026-10-01T23:06:02Z Persino 2851 /* {{Śródtytuł|ZbieranieDanychStronZAutonawigacji}}{{Code|ZbieranieDanychStronZAutonawigacji}} */ 558255 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|setmetatable}}. Iterujemy dla elementach tabeli: {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artykuł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 z definicji: {{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ł|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzuca 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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno jak w: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 = {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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 przypisywania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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 jednego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = Jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli właśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = Inne parametry: | nagłówek6 = tak | 7 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _7 = Tabela innych spisów książki, jeżeli istnieją, | 8 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _8 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 9 = {{Code|numer}} {{Patrz|numer}} | _9 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{Code|tab_inne_spisy}} {{LinkPatrz|tab_inne_spisy}}, nie istnieje, to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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: {{Code|tab_stare}} {{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ą pozycję, przy pomocy funkcji: {{LzLua|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzyskiwania 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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 treści, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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 określonej strony szablonu z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Gdy parametr z iteracji iteratorem: {{Code|iter}}, z którego przy jego kolejnych wywołaniach otrzymujemy parametry: {{Code|strona}} {{LinkPatrz|strona}}, i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla: {{Code|strona}} {{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ę: {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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 strona jest 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy, mając przetwarzaną 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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ą wskazuje to przekierowanie, oznaczmy tą zmienną: {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} {{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: {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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łównej 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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 7n6vqb007pv1op1uq0w6bk5db34hk2d 558256 558255 2026-10-01T23:08:07Z Persino 2851 /* Dalszy opis funkcji głównej */ 558256 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ł|p.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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = 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: {{LzLua|setmetatable}}. Iterujemy dla elementach tabeli: {{Code|tabela_artykulow}} {{Patrz|tabela_artykulow}}, a póżniej sprawdzamy, czy artykuł znajduje się w dozwolonych rozdziałach jako artykuł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 z definicji: {{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ł|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}}{{Code|p.ZbieranieInformacjiSpisuRzeczyWoluminuEwentualnieWedleAutonawigacji}} === ==== Opis funkcji ==== Funkcja zrzuca 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: {{OpisParametrów | 1 = {{Code|self}} {{Patrz|self}} | _1 = Zmienna obiektowa funkcji. | 2 = {{Code|nazwa_przestrzeni}} {{Patrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{Patrz|nazwa_przestrzeni_ksiazki}} i {{Code|nazwa_ksiazki}} {{Patrz|nazwa_ksiazki}} | _2 = Kolejno jak w: '''nazwa przestrzeni nazw''', '''nazwa przestrzeni książki''' i '''nazwa książki'''. | 3 = {{Code|czy_artykul_korzystany}} {{Patrz|czy_artykul_korzystany}} | _3 = {{Code|true}}, gdy artykuł dany jest korzystamy, czy aktualnie korzystamy z niego za pomocą przeglądarki. | 4 = {{Code|__FUNKCJA_SPISU_RZECZY}} {{Patrz|__FUNKCJA_SPISU_RZECZY}} | _4 = 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 przypisywania, na które wskazuje przekierowanie, danych z przekierowania do strony, którym jest to właśnie przekierowanie. | 5 = {{Code|__FUNKCJA_ZBIERANIA_DANYCH}} {{Patrz|__FUNKCJA_ZBIERANIA_DANYCH}} | _5 = 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 jednego spisu, a nie wszystkich razem, tylko oddzielnie. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function Spis(tablista_artykulow,spis_tresci,tab_inne_spisy,nazwa_glownego_spisu,numer)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} {{Patrz|tablista_artykulow}} | _1 = Tabela rozdziałów i do nich artykułów. | 2 = {{Code|spis_tresci}} {{Patrz|spis_tresci}} | _2 = Jeżeli strona nie jest przekierowaniem, to jest wtedy łańcuch znakowy opisujący dany spis, a jeżeli właśnie jest, wtedy jest to tablica, coś w rodzaju {{Code|<nowiki>{przekierowanie_spisu_tresci,spis_tresci,}</nowiki>}}: | 3 = Wyjaśnienie: | nagłówek3 = tak | 4 = {{Code|przekierowanie_spisu_tresci}} {{Patrz|przekierowanie_spisu_tresci}} | _4 = Strona spis treści, która jest jednocześnie przekierowaniem. | 5 = {{Code|spis_treści}} | _5 = Jak w: {{LinkPatrz|spis_tresci}}, tylko, że tylko łańcuch znakowy, na który wskazuje przekierowanie. | 6 = Inne parametry: | nagłówek6 = tak | 7 = {{Code|tab_inne_spisy}} {{Patrz|tab_inne_spisy}} | _7 = Tabela innych spisów książki, jeżeli istnieją, | 8 = {{Code|nazwa_glownego_spisu}} {{Patrz|nazwa_glownego_spisu}} | _8 = Nazwa głównego spisu treści, zwykle jest to strona główna książki. | 9 = {{Code|numer}} {{Patrz|numer}} | _9 = 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|numer}} | _3 = Jak w: {{LinkPatrz|numer}}. }} Gdy zmienna: {{Code|tablista_artykulow}} {{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: {{Code|przekierowanie_spisu_tresci}} {{LinkPatrz|przekierowanie_spisu_tresci}}, lub tylko jest łańcuchem znakowym, według: {{Code|spis_tresci}} {{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: {{Code|tab_element}} {{LinkPatrz|tab_element}}. Następnie usuwamy pierwszy rozdział z artykułami przy pomocy funkcji: {{LzLua|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: {{Code|tab_element}} {{LinkPatrz|tab_element}}, do tablicy: {{Code|tablista_artykulow}} {{LinkPatrz|tablista_artykulow}}}, przy pomocy funkcji: {{LzLua|table.insert}}. Jeżeli spis treści: {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, istnieje, wtedy robimy dalsze operacje. Jeżeli tablica: {{Code|tab_inne_spisy}} {{LinkPatrz|tab_inne_spisy}}, nie istnieje, to ją tworzymy, wtedy {{Code|spis_tresci}} {{LinkPatrz|spis_tresci}}, przy pomocy: {{LzLua|table.insert}}, dodajemy do: {{Code|tab_inne_spisy}} {{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: {{Code|tab_stare}} {{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ą pozycję, przy pomocy funkcji: {{LzLua|table.insert}}. Następnym krokiem jest zwracanie przez funkcję zmiennych powyżej powiedzianych. ===== {{Śródtytuł|InneSpisy}}{{Code|InneSpisy}} ===== Funkcja służy do uzyskiwania 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: {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 3 = {{Code|spis_tresci}} | _3 = Jak w: {{LinkPatrz|spis_tresci}}. | 4 = {{Code|numer}} | _4 = 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ą: {{Code|tablista_artykulow_iter}} {{LinkPatrz|tablista_artykulow_iter}}, iterujemy po elementach wsadzając ją do tablicy na sam koniec: {{Code|tablista_artykulow}} {{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: {{LzLua|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 treści, by dodać do niego nowy spis, jeżeli on istnieje, jako artykuł w spisie o nazwach: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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: {{OpisParametrów | 1 = {{Code|tabela_artykulow}} | _1 = Jak w: {{LinkPatrz|tabela_artykulow}}. | 2 = {{Code|tab_inne_spisy}} | _2 = Jak w: {{LinkPatrz|tab_inne_spisy}}. }} Uruchamiamy funkcję: {{LinkŚródtytuł|p.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.: {{Code|artykul_spisu_rzeczy}} {{LinkPatrz|artykul_spisu_rzeczy}}, to jest to samo, co: {{Code|artykul_bez_naglowka_w_bazie}} {{LinkPatrz|artykul_bez_naglowka_w_bazie}}, uzyskanej z funkcji liczący taki spis według: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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ślonej z katalogu stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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: {{Code|{{s|Autonawigacja}}}} {{LinkPatrz|Autonawigacja}}, ale na podstawie {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, według jednych ze stron: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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 określonej strony szablonu z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{LinkPatrz|NawigacjaSpecjalna/Nawigacja/}}. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local function ZbieranieDanychStronZAutonawigacji()...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Brak parametrów. | komórka1 = tak }} Gdy parametr z iteracji iteratorem: {{Code|iter}}, z którego przy jego kolejnych wywołaniach otrzymujemy parametry: {{Code|strona}} {{LinkPatrz|strona}}, i {{Code|nazwa}} {{LinkPatrz|nazwa}}, dla: {{Code|strona}} {{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ę: {{LzLua|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: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, według: <syntaxhighlight lang="lua"> tabela_rozdzial_artykulow=tablista_artykulow[#tablista_artykulow]; </syntaxhighlight> Następnie liczyny adres bezwzględny: {{Code|strona}} {{LinkPatrz|strona}} z funkcji: {{Code|{{sr|#p["PrzeszkałćAdresWzględnyStronyNaBezwzględny"]|p=Techniczne}}}}, według wywołania, znająć dwa parametry: {{Code|strona}} {{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: {{OpisParametrów | 1 = {{Code|tabela_rozdzial_artykulow}} {{Patrz|tabela_rozdzial_artykulow}} | _1 = Tabela rozdziału i do niego artykułów. | 2 = {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{Patrz|numer_rodzaju_artykulow_w_nie_podreczniku}} | _2 = Numer pozycji na którym element zostonie element {{LinkPatrz|tab_stare}} wstawiony. | 3 = {{Code|tab_stare}} {{LinkPatrz|tab_stare}} | _3 = 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 strona jest 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: {{Code|dodatkowe_artykuly}} {{LinkPatrz|dodatkowe_artykuly}}, przy pomocy funkcji: {{LzLua|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: {{Code|tab_stare}} {{LinkPatrz|tab_stare}}, do: {{Code|tabela_rozdzial_artykulow}} {{LinkPatrz|tabela_rozdzial_artykulow}}, na pozycję: {{Code|numer_rodzaju_artykulow_w_nie_podreczniku}} {{LinkPatrz|numer_rodzaju_artykulow_w_nie_podreczniku}}, używając wywołania {{LzLua|table.insert}}, czyli: <syntaxhighlight lang="lua"> table.insert(tabela_rozdzial_artykulow[numer_rodzaju_artykulow_w_nie_podreczniku],tab_stare); </syntaxhighlight> ====== Dalszy opis funkcji nadrzędnej ====== Dalszym krokiem jest wsadzenie elementu do ogólnej tablicy, a tutaj do artykułu w danym rozdziale, robimy, mając przetwarzaną 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: {{Code|tab_stare}} {{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 zapoznać się z funkcją przetwarzającą dane przed wsadzeniem do ogólnej tablicy. ==== Dalszy opis funkcji głównej ==== Liczymy adres strony głównej 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ą wskazuje to przekierowanie, oznaczmy tą zmienną: {{Code|strona_spisu_tresci}} {{Patrz|strona_spisu_tresci}}. Jeżeli: {{Code|strona_spisu_tresci}} {{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: {{Code|nazwa_przestrzeni_ksiazki2}} {{LinkPatrz|nazwa_przestrzeni_ksiazki2}}, jest pusta, przeciwnie z: {{Code|{{sr|#m["SUBNAZWAKSIĄŻKI"]|p=Nazwy/Tom IV}}}}. Sprawdzamy, czy one pokrywają się kolejno z: {{Code|nazwa_przestrzeni}} {{LinkPatrz|nazwa_przestrzeni}}, {{Code|nazwa_przestrzeni_ksiazki}} {{LinkPatrz|nazwa_przestrzeni_ksiazki}}, i {{Code|nazwa_ksiazki}} {{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: {{Code|__FUNKCJA_SPISU_RZECZY}} {{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ę: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Liczymy adres ustawień z: {{Code|NawigacjaSpecjalna/Nawigacja/...}} {{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łównej 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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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ą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|automat_manualny}} {{LinkPatrz|automat_manualny}}, jest pusta lub nie podana, wtedy następnym krokiem jest odkodowanie parametrów: {{Code|{{s|Układ autonawigacji}}}} {{LinkPatrz|Układ autonawigacji}}, przy pomocy: {{Code|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul_uklad_autonawigacji}}, i ich rozwinięcie funkcją: {{LzLua|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: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{LinkPatrz|tabela_parametrow_szablonu_uklad_autonawigacji}}, oraz sprawdzamy, czy one są niepuste. Gdy zmienna: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, jest niepodana lub pusta, wtedy liczymy z klucza: {{Code|spis treści}} {{LinkPatrz|spis treści}}, ze zmiennej: {{Code|tabela_parametrow_szablonu_uklad_autonawigacji}} {{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.: {{Code|pelna_nazwa_ksiazki}} {{LinkPatrz|pelna_nazwa_ksiazki}}. Następnie sprawdzamy, czy w policzonym spisie nazwa ksiązki zgadza się z tą: {{Code|pelna_nazwa_ksiazki}} {{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: {{Code|bez spisów treści}} {{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: {{Code|bez spisów treści}} {{LinkPatrz|bez spisów treści}}, i {{Code|bez analizy spisów treści}} {{LinkPatrz|bez analizy spisów treści}}, są niepodane lub puste, wtedy liczymy pojedynczy artykuł będący spisem treści o nazwie: {{Code|nazwa_glownego_spisu}} {{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: {{Code|{{sr|#p.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu|p=StronicowyParser/obiekty}}}} {{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> Każdy 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> Uruchomimy inny iterator: {{Code|iter}} {{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{{dk}} {{OpisParametrów | 1 = {{Code|tablista_artykulow}} | _1 = Jak w: {{LinkPatrz|tablista_artykulow}}. | 2 = {{Code|licencja}} | _2 = Jak w: {{LinkPatrz|licencja}}. | 3 = {{Code|nazwa_glownego_spisu}} | _3 = Jak w: {{LinkPatrz|nazwa_glownego_spisu}}. | 4 = {{Code|tab_inne_spisy}} | _4 = Jak w: {{LinkPatrz|tab_inne_spisy}}. | 5 = {{Code|dodatkowe_artykuly}} | _5 = Jak w: {{LinkPatrz|dodatkowe_artykuly}}. | 6 = {{Code|adres_ksiazki_glownego_spisu_tresci}} | _6 = Jak w: {{LinkPatrz|adres_ksiazki_glownego_spisu_tresci}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> mxbau0lgsolsf7puc5zonz707jhzqpj Wikibooks:Moduły/StronicowyParser/Rozdziały/Tom V 4 64127 558219 554268 2026-10-01T17:46:38Z Persino 2851 558219 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/Rozdziały}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} Ten tom ma spis treści do opisów funkcji: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały/Tom V/Część I}}}}, w dwóch wydzielonych częściach (podstronach), dla zwięzłości wykładu. == Spis treści == ; Rozważania przed zwróceniem iteratora{{dk}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom V/Część I}} - opisuje części funkcji: {{Code|{{sr|#p.IterTekst|p=StronicowyParser/Rozdziały/Tom V/Część I}}}}, do iteracji po tekście: {{Code|tekst_rozwiniety_calego_artykulu}}, bez części jej iteratora, wraz integrowaniem linii, i wydzieleniem jego właściwej treści. ; Omawianie zrzuconego iteratora, przez funkcję główną, wraz jego zwracanymi w wyniku iteracji parametrami, opis jej różnorodności{{dk}} * {{lru|Moduły/StronicowyParser/Rozdziały/Tom V/Część II}} - opisuje część część tej funkcji, tzn. zwracany iterator bezparametrowy, dla elementu zakodowanego, jak i niezakodowanego, z tylko z opcją z rozdziałami dodatnimi równaniowymi, bądź z dodatkiem, czyli z rozdziałami ujemnymi, także i zerowymi, jak i z nagłówkami centrowanymi szablonowymi i znacznikowymi, również znacznikami nagłówków. {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> exdurnmuqb5pdem7ya2kzomwvr234oq