Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.24 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 559625 559562 2026-10-19T16:08:21Z YxiCode 34510 /* Projekt nowej strony głównej */ Odpowiedź 559625 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) :Czy będą wyróżnienia najlepszych podręczników jako wzory do naśladowania dla nowych twórców? Czy jednak będzie to pod jakąś podstroną? [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 17:28, 18 paź 2026 (CEST) ::Nie zauważyłem globalnego bloka. Szkoda, przydałby się redesign ;( [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 17:30, 18 paź 2026 (CEST) :::{{Ping|YxiCode}} Szablony zestawów są w: [[:Kategoria:Szablony nominacji książek/Nowe podręczniki miesiąca/Zestawy]] i [[:Kategoria:Szablony nominacji książek/Wyróżnienia książek miesiąca/Zestawy]], wybierane czasowo, mogę to dodać na stronę główną. A głosowanie odbywa się w: [[:Wikibooks:Wkład miesiąca/Aktualne głosowanie]]. Co mam zrobić, by było lepiej? [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 18:01, 18 paź 2026 (CEST) ::::Generalnie to układ strony jest bardzo zwarty i trudno skupić się na jednym kawałku informacji. Warto skrócić długie ciągi tekstu na krótkie podsumowania. Dodatkowo wprowadziłbym układ jedno-kolumnowy dla urządzeń mobilnych, gdyż widać że strona jest dosyć przestarzała. ::::Skrócenie ramek do najważniejszych informacji również wyeliminowałby problem potrzeby ich przewijania. ::::Co do szaty graficznej to warto się zająć tym później. Myślę, że obecna jest jeszcze OK ale warto ją zmienić w niedalekiej przyszłości. [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 18:10, 18 paź 2026 (CEST) :::: {{Ping|YxiCode}} Strona główna jest przystosowana do urządzeń mobilnych. Na komputerze jest normalnie, a na telefonie jest układ jednokolumnowy! [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 18:14, 18 paź 2026 (CEST) :::::Rozumiem i przepraszam za niepoprawną informację. Nadal radziłbym, aby tekst nie był tak gęsty jak obecnie. [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 18:18, 18 paź 2026 (CEST) ::::: {{Ping|YxiCode}} Co to znaczy w tym przypadku: '''gęsty'''! [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 18:21, 18 paź 2026 (CEST) ::::::Gęsty, czyli zawierający zbyt dużo informacji, które: ::::::* mogłyby być przeniesione do innych podstron, ::::::* streszczone. ::::::[[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 18:26, 18 paź 2026 (CEST) :::::: {{Ping|YxiCode}} No to nawet Ty możesz edytować te zestawy, a ja je umieszczę na stronie głównej, w postaci wybierania czasowego! [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 18:35, 18 paź 2026 (CEST) :::::::A szablony np. <nowiki>{{Strona główna/Wprowadzenie}}</nowiki>, to czy to też można zmieniać? [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 18:38, 18 paź 2026 (CEST) ::::::: {{Ping|YxiCode}} Jest on zabezpieczony przed wandalizmami, więc tylko administratorzy mogą to edytować, ale możesz go zmieniać w brudnopisie! ::::::: {{Ping|Persino}} [[Wikipedysta:YxiCode/Brudnopis]] - Przeprowadziłem poprawki dla pierwszych dwóch ramek. Czy Twoim zdaniem jest w porządku? [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 19:33, 18 paź 2026 (CEST) ::::::::{{Ping|YxiCode}} Jeszcze może być, ale wymaga poprawek! [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 00:24, 19 paź 2026 (CEST) :::::::::Co dokładnie, jakie poprawki? [[Wikipedysta:YxiCode|YxiCode]] ([[Dyskusja wikipedysty:YxiCode|dyskusja]]) 18:08, 19 paź 2026 (CEST) == 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 --> k9qr2q0mfgaizmbi3u1j1kba1jksmsd Wikibooks:Prośby do administratorów/Zgłoszenia 4 33867 559668 517594 2026-10-20T11:38:12Z Argonowski 14676 /* Jak zacząć? */ nowa sekcja 559668 wikitext text/x-wiki <noinclude>__LINKNOWEJSEKCJI__ {{Kategoria|Księga próśb i zadań}}</noinclude> {{fmbox|tekst=UWAGA: Nowe zgłoszenia o innym temacie, niż to, co dotyczy {{lr2|Prośby do administratorów/Zgłoszenia}}, lub łamiące zasady {{lr|Wikietykieta|Wikietykiety}}, mogą być bezwarunkowo wycofywane z tej strony.}} <!-- Nowe zgłoszenia wstawiaj poniżej tej linii. Powyżej tej linii nic nie usuwaj. Nie usuwaj tej linii --> == Wprowadzenie kont tymczasowych – zmiany w filtrach nadużyć == Hej! W związku z tym, że w przyszłości (bardziej niedalekiej niż odległej) wprowadzone zostaną konta tymczasowe, przejrzałem filtry nadużyć w polskojęzycznych projektach, aby znaleźć te, wymagające aktualizacji. W przypadku Wikibooks istnieją dwa takie: [[Specjalna:Filtr nadużyć/1]] i [[Specjalna:Filtr nadużyć/2]]. Filtr <code>user_age == 0</code>, który w tej chwili jest prawdziwy dla użytkowników anonimowych, nie będzie działał zgodnie z zamysłem dla kont tymczasowych – one będą miały <code>user_age > 0</code>. Sugerowany warunek w zamian to: <code>user_type in ['ip', 'temp']</code>. Warunkek złożony <code>old_size+user_age==0</code> sugeruję rozbić na <code>old_size == 0 & user_type in ['ip', 'temp']</code>. Nie jest to pilna kwestia, bo dopóki nie zostaną wprowadzone konta tymczasowe, nic się nie popsuje, a po ich wprowadzeniu nic się nie posypie – jedynie filtr przestanie się dopasowywać do edycji (bo nie będzie użytkowników o wieku konta równym zero). Więcej informacji na [[mw:Trust_and_Safety_Product/Temporary_Accounts/For_developers|mediawiki.org]]. [[Wikipedysta:Msz2001|Msz2001]] ([[Dyskusja wikipedysty:Msz2001|dyskusja]]) 11:52, 13 kwi 2024 (CEST) : Już zrobione. [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 15:03, 13 kwi 2024 (CEST) ::@[[Wikipedysta:Persino|Persino]], dzięki! W obu filtrach, po <code>['ip', 'temp']</code> pozostało <code>==0</code>. Te trzy znaki nie są po zmianie potrzebne i również należy je skasować. Jeśli nie wyraziłem się w oryginalnej wiadomości zbyt jasno, to przepraszam. Pozdrawiam, [[Wikipedysta:Msz2001|Msz2001]] ([[Dyskusja wikipedysty:Msz2001|dyskusja]]) 15:08, 13 kwi 2024 (CEST) ::: Poprawione. [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 00:28, 14 kwi 2024 (CEST) ::::Dzięki, teraz jest wszystko w porządku :) [[Wikipedysta:Msz2001|Msz2001]] ([[Dyskusja wikipedysty:Msz2001|dyskusja]]) 10:31, 14 kwi 2024 (CEST) == Naruszenie praw autorskich na polskich Wikibooks == Dzień dobry. Bardzo proszę o wszczęcie pilnej procedury weryfikacji bądź usunięcia wkładu użytkownika [[Wikipedysta:Świętokrzyskie3|<bdi>Świętokrzyskie3</bdi>]] (zablokowanego obecnie we wszystkich projektach Wikimedia). Użytkownik ten w czasie edytowania notorycznie naruszał zapisy ustawy z dnia 4 lutego 1994 r. o prawie autorskim i prawach pokrewnych, która zakazuje kopiowania bez żadnej modyfikacji treści z innych stron. Przykładowo - artykuł [[Książka kucharska/Schab wieprzowy ze smalcu]]. Opis przygotowania jest słowo w słowo skopiowany z bloga https://czechofil.com/2014/02/15/gulasz-wieprzowy-czeskie-knedle-bulaczne/ Uważam, że powinno być to naszym priorytetem - posprzątanie i weryfikacja po tym użytkowniku, ponieważ pozostawiając naruszenie praw autorskich w naszym projekcie narażamy Stowarzyszenie Wikimedia Polska, która pełni pieczę nad polskojęzycznym Wikibooks na poważne konsekwencje prawno-sądowe. [[Wikipedysta:Igor123121|Igor123121]] ([[Dyskusja wikipedysty:Igor123121|dyskusja]]) 20:48, 15 paź 2025 (CEST) * {{Ping|Igor123121|EdytaT}} Zgłaszajcie za pomocą szablonu {{s|ek}}, które artykuły mam usunąć książki kucharskiej tego autora, a ja usunę, ale najpierw niech rozpocznie się proces weryfikacji wszystkich artykułów tego podręcznika też tego autora... [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 21:04, 15 paź 2025 (CEST) *:@[[Wikipedysta:Persino|Persino]] można również rozważyć kasację treści, które naruszają prawa autorskie, ale wtedy prawdopodobnie pozostałaby jedynie lista składników (w najlepszych przypadkach) w każdym artykule, więc nie wiem czy ma to większy sens... Chyba najlepiej będzie je wszystkie usunąć. [[Wikipedysta:Igor123121|Igor123121]] ([[Dyskusja wikipedysty:Igor123121|dyskusja]]) 21:26, 15 paź 2025 (CEST) *: {{Ping|EdytaT}} Pewnie mówi to samo! Więc w najbliższym czasie skasuje te artykuły wszystkie, jeżeli je utworzył [[Wikipedysta:Świętokrzyskie3|<bdi>Świętokrzyskie3</bdi>]]. A co z artykułami, które on modyfikował, ale ich nie utworzył? [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 21:57, 15 paź 2025 (CEST) *::@[[Wikipedysta:Persino|Persino]] zacznę powoli przeglądać jego artykuły. Na szczęście widziałem, że w lipcu skasowałeś już bardzo dużo jego plagiatów (1703 z 2075) https://xtools.wmcloud.org/pages/pl.wikibooks.org/%C5%9Awi%C4%99tokrzyskie3 *::Więc do przeglądnięcia zostało nam około 370 artykułów. Co do przeglądnięcia jego wszystkich edycji to raczej nie widzę na to większych szans, ponieważ wykonał ich prawie 23 tysiące. Ech... [[Wikipedysta:Igor123121|Igor123121]] ([[Dyskusja wikipedysty:Igor123121|dyskusja]]) 22:04, 15 paź 2025 (CEST) *:: {{Ping|EdytaT|Igor123121}} Już wszystkie artykuły, które rozpoczął ten użytkownik, co do książki kucharskiej, tworząc nowe strony, zostały skasowane! [[Wikipedysta:Persino|Persino]] ([[Dyskusja wikipedysty:Persino|dyskusja]]) 00:07, 16 paź 2025 (CEST) *:::@[[Wikipedysta:Persino|Persino]] Świetne wiadomości! Dziękuje [[Wikipedysta:Igor123121|Igor123121]] ([[Dyskusja wikipedysty:Igor123121|dyskusja]]) 06:24, 16 paź 2025 (CEST) *::::Super! [[Wikipedysta:EdytaT|EdytaT]] ([[Dyskusja wikipedysty:EdytaT|dyskusja]]) 13:25, 16 paź 2025 (CEST) == Jak zacząć? == Cześć. Chciałbym stworzyć własną książkę na wikibooks poświęconą religiom. Mam jedną obszerną encyklopedię z 2006 oraz mały słownik pojęć religijnych z lat 60tych oraz jedną książeczkę z lat 10 XXI wieku, które chciałbym wykorzystać w pracy nad książką. Dodatkowo chciałbym wykorzystać źródła internetowe. Mam nawet na oku [https://commons.wikimedia.org/wiki/File:Znak_drogowy_-_religia.jpg okładkę dla takiej książki]. Więc jak mógłbym zacząć? [[Wikipedysta:Argonowski|Argonowski]] ([[Dyskusja wikipedysty:Argonowski|dyskusja]]) 13:38, 20 paź 2026 (CEST) ln8bwtqdh9y7ys51c537s7grededyft Matematyka dla ostatnich klas szkoły podstawowej 0 61592 559627 559558 2026-10-19T16:43:07Z YxiCode 34510 /* I. Działania na liczbach */ 559627 wikitext text/x-wiki {{Status|-0%|Matematyka|Klasy 7-8 szkoły podstawowej|poziom=Szkoła podstawowa}} Podręcznik jest przeznaczony dla uczniów klasy '''siódmej''' i '''ósmej''' szkoły podstawowej. Podzielony jest na dwie główne części: materiał dla klasy VII oraz dla klasy VIII. Obie części obejmują kluczowe zagadnienia z arytmetyki, algebry, geometrii i statystyki. Podręcznik jest zgodny z podstawą programową z 2017 roku, przed jej późniejszym uszczupleniem. '''[[Matematyka dla ostatnich klas szkoły podstawowej/Odpowiedzi do zadań|Odpowiedzi do zadań]]''' Poniżej znajduje się spis treści: == Wstęp == # [[Matematyka dla ostatnich klas szkoły podstawowej/Legenda|Legenda]] # [[Matematyka dla ostatnich klas szkoły podstawowej/Cenne źródła informacji|Cenne źródła informacji]] == KLASA VII == === I. Działania na liczbach === # [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb|Rodzaje liczb]] {{kompletność krótka|50%|19.10.2026}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczby wymiernej|Postać dziesiętna liczby wymiernej]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Przybliżenia - zaokrąglanie i szacowanie|Przybliżenia - zaokrąglanie i szacowanie]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Oś liczbowa|Oś liczbowa]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Dodawanie i odejmowanie liczb dodatnich|Dodawanie i odejmowanie liczb dodatnich]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie i dzielenie liczb dodatnich|Mnożenie i dzielenie liczb dodatnich]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na liczbach dodatnich i ujemnych|Działania na liczbach dodatnich i ujemnych]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Łączenie działań. Wyrażenia arytmetyczne|Łączenie działań. Wyrażenia arytmetyczne]] {{kompletność krótka|0%|26.09.2025}} === II. Potęgowanie i pierwiastkowanie === # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęga o wykładniku naturalnym|Potęga o wykładniku naturalnym]] {{kompletność krótka|100%|10.10.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie i dzielenie potęg o tych samych podstawach|Mnożenie i dzielenie potęg o tych samych podstawach]] {{kompletność krótka|50%|27.10.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie potęgi|Potęgowanie potęgi]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|Potęgowanie iloczynów i ilorazów]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na potęgach|Działania na potęgach]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Notacja wykładnicza dla dużych liczb|Notacja wykładnicza dla dużych liczb]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Notacja wykładnicza dla małych liczb|Notacja wykładnicza dla małych liczb]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pierwiastki|Pierwiastki]] {{kompletność krótka|50%|04.11.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na pierwiastkach|Działania na pierwiastkach]] {{kompletność krótka|25%|06.12.2025}} === III. Wyrażenia algebraiczne === # [[Matematyka dla ostatnich klas szkoły podstawowej/Zastosowania wyrażeń algebraicznych|Zastosowania wyrażeń algebraicznych]] {{kompletność krótka|0%|26.09.2025}} # Podstawianie. Obliczanie wartości liczbowej wyrażenia algebraicznego {{kompletność krótka|0%|26.09.2025}} # Jednomiany i ich właściwości {{kompletność krótka|0%|26.09.2025}} # Wielomiany {{kompletność krótka|0%|26.09.2025}} # Dodawanie i odejmowanie wielomianów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomiana przez jednomian|Mnożenie wielomiana przez jednomian]] {{kompletność krótka|25%|14.01.2026}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomianów|Mnożenie wielomianów]] {{kompletność krótka|100%|21.12.2025}} === IV. Równania === # Zastosowania równań {{kompletność krótka|0%|26.09.2025}} # Liczba spełniające równanie {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Rozwiązywanie równań|Rozwiązywanie równań]] {{kompletność krótka|0%|26.09.2025}} # Zadania tekstowe z wykorzystaniem równań {{kompletność krótka|0%|26.09.2025}} # Przekształcanie wzorów {{kompletność krótka|0%|26.09.2025}} === V. Procenty === # Powiązanie ułamków z procentami {{kompletność krótka|0%|26.09.2025}} # Diagramy procentowe {{kompletność krótka|0%|26.09.2025}} # Obliczanie procentu z danej liczby {{kompletność krótka|0%|26.09.2025}} # Ustalanie jakim procentem jednej liczby jest druga {{kompletność krótka|0%|26.09.2025}} # Znajdowanie liczby gdy podany jest jej procent {{kompletność krótka|0%|26.09.2025}} # Podwyżki i obniżki {{kompletność krótka|0%|26.09.2025}} # Punkty procentowe {{kompletność krótka|0%|26.09.2025}} # Różne obliczenia procentowe {{kompletność krótka|0%|26.09.2025}} # Równania a procenty {{kompletność krótka|0%|26.09.2025}} === VI. Geometria na płaszczyźnie === # Punkty, proste, odcinki {{kompletność krótka|0%|26.09.2025}} # Właściwości kątów {{kompletność krótka|0%|26.09.2025}} # Właściwości trójkątów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Trójkąty przystające|Trójkąty przystające]] {{kompletność krótka|0%|14.03.2026}} # Właściwości czworokątów {{kompletność krótka|0%|26.09.2025}} # Wielokąty foremne {{kompletność krótka|0%|26.09.2025}} # Pole prostokąta {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pola innych wielokątów|Pola innych wielokątów]] {{kompletność krótka|0%|26.09.2025}} # Współrzędne {{kompletność krótka|0%|11.12.2025}} === VII. Geometria przestrzenna === # Różne graniastosłupy {{kompletność krótka|0%|26.09.2025}} # Siatka i pole powierzchni graniastosłupa {{kompletność krótka|0%|26.09.2025}} # Jednostki objętości i objętość prostopadłościanu {{kompletność krótka|0%|26.09.2025}} # Objętość graniastosłupów {{kompletność krótka|0%|26.09.2025}} === VIII. Statystyka === # Dane statystyczne {{kompletność krótka|0%|26.09.2025}} # Średnia {{kompletność krótka|0%|26.09.2025}} # Zbieranie i opracowywanie danych {{kompletność krótka|0%|26.09.2025}} # Losowe zdarzenia {{kompletność krótka|0%|26.09.2025}} == KLASA VIII == === IX. Arytmetyka === # [[Matematyka dla ostatnich klas szkoły podstawowej/System rzymski|System rzymski]] {{kompletność krótka|100%|27.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Podzielność, dzielniki, wielokrotności|Podzielność, dzielniki, wielokrotności]] {{kompletność krótka|75%|02.10.2025}} # Porównywanie liczb {{kompletność krótka|0%|26.09.2025}} # Działania na liczbach {{kompletność krótka|0%|26.09.2025}} # Działania na potęgach i pierwiastkach {{kompletność krótka|0%|26.09.2025}} === X. Algebra === # [[Matematyka dla ostatnich klas szkoły podstawowej/Przekształcanie wyrażeń|Przekształcanie wyrażeń]] {{kompletność krótka|25%|25.04.2026}} # Równania {{kompletność krótka|0%|26.09.2025}} # Proporcje {{kompletność krótka|0%|26.09.2025}} # Proporcjonalność prosta {{kompletność krótka|0%|26.09.2025}} === XI. Planimetria, cz. 1 === # Właściwości trójkątów i czworokątów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Twierdzenie Pitagorasa|Twierdzenie Pitagorasa]] {{kompletność krótka|0%|26.09.2025}} # Do czego stosujemy twierdzenie Pitagorasa? {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Przekątna kwadratu i wysokość w trójkącie równobocznym|Przekątna kwadratu i wysokość w trójkącie równobocznym]] {{kompletność krótka|100%|27.11.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Trójkąty 90°, 45°, 45° oraz 90°, 30°, 60°|Trójkąty 90°, 45°, 45° oraz 90°, 30°, 60°]] {{kompletność krótka|0%|26.09.2025}} # Odcinki a układ współrzędnych {{kompletność krótka|0%|26.09.2025}} # Dowody geometryczne {{kompletność krótka|0%|26.09.2025}} === XII. Planimetria, cz. 2 === # Styczna okręgu {{kompletność krótka|0%|26.09.2025}} # Wzajemne położenie okręgów {{kompletność krótka|0%|26.09.2025}} # π i długość okręgu {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pole koła|Pole koła]] {{kompletność krótka|0%|26.09.2025}} === XIII. Stereometria === # Graniastosłup - pole i objętość {{kompletność krótka|0%|26.09.2025}} # Odcinki w graniastosłupie {{kompletność krótka|0%|26.09.2025}} # Ostrosłupy i ich rodzaje {{kompletność krótka|0%|26.09.2025}} # Siatki i pole powierzchni ostrosłupów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Objętość ostrosłupów|Objętość ostrosłupów]] {{kompletność krótka|50%|05.02.2026}} # Odcinki w ostrosłupach {{kompletność krótka|0%|26.09.2025}} === XIV. Symetria === # Symetria względem prostej {{kompletność krótka|0%|26.09.2025}} # Oś symetrii {{kompletność krótka|0%|26.09.2025}} # Symetralna dowolnego odcinka {{kompletność krótka|0%|26.09.2025}} # Dwusieczna kąta {{kompletność krótka|0%|26.09.2025}} # Symetria względem punktu {{kompletność krótka|0%|26.09.2025}} # Środek symetrii {{kompletność krótka|0%|26.09.2025}} === XV. Matematyka w prawdziwym życiu === # Obliczenia z procentami {{kompletność krótka|0%|26.09.2025}} # Lokaty bankowe, zmiana o dany procent {{kompletność krótka|0%|26.09.2025}} # Podatki {{kompletność krótka|0%|26.09.2025}} # Diagramy {{kompletność krótka|0%|26.09.2025}} # Wykresy {{kompletność krótka|0%|26.09.2025}} # Podział proporcjonalny {{kompletność krótka|0%|26.09.2025}} # Obliczanie prawdopodobieństwa {{kompletność krótka|0%|26.09.2025}} === XVI. Prawdopodobieństwo === # Ile mamy możliwości? Podstawy kombinatoryki {{kompletność krótka|0%|26.09.2025}} # Obliczanie prawdopodobieństw z pomocą kombinatoryki {{kompletność krótka|0%|26.09.2025}} lzkhjcolhezvwtadsnhmp24sbcyoxri 559628 559627 2026-10-19T16:49:55Z YxiCode 34510 559628 wikitext text/x-wiki {{Status|-0%|Matematyka|Klasy 7-8 szkoły podstawowej|poziom=Szkoła podstawowa}} Podręcznik jest przeznaczony dla uczniów klasy '''siódmej''' i '''ósmej''' szkoły podstawowej. Podzielony jest na dwie główne części: materiał dla klasy VII oraz dla klasy VIII. Obie części obejmują kluczowe zagadnienia z arytmetyki, algebry, geometrii i statystyki. Podręcznik jest zgodny z podstawą programową z 2017 roku, przed jej późniejszym uszczupleniem. Jest on gotowy w '''{{#expr: floor ((7.75 / 96) * 100 * 100 + 0.5) / 100 }}%'''. '''[[Matematyka dla ostatnich klas szkoły podstawowej/Odpowiedzi do zadań|Odpowiedzi do zadań]]''' Poniżej znajduje się spis treści: == Wstęp == # [[Matematyka dla ostatnich klas szkoły podstawowej/Legenda|Legenda]] # [[Matematyka dla ostatnich klas szkoły podstawowej/Cenne źródła informacji|Cenne źródła informacji]] == KLASA VII == === I. Działania na liczbach === # [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb|Rodzaje liczb]] {{kompletność krótka|50%|19.10.2026}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczby wymiernej|Postać dziesiętna liczby wymiernej]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Przybliżenia - zaokrąglanie i szacowanie|Przybliżenia - zaokrąglanie i szacowanie]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Oś liczbowa|Oś liczbowa]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Dodawanie i odejmowanie liczb dodatnich|Dodawanie i odejmowanie liczb dodatnich]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie i dzielenie liczb dodatnich|Mnożenie i dzielenie liczb dodatnich]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na liczbach dodatnich i ujemnych|Działania na liczbach dodatnich i ujemnych]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Łączenie działań. Wyrażenia arytmetyczne|Łączenie działań. Wyrażenia arytmetyczne]] {{kompletność krótka|0%|26.09.2025}} === II. Potęgowanie i pierwiastkowanie === # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęga o wykładniku naturalnym|Potęga o wykładniku naturalnym]] {{kompletność krótka|100%|10.10.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie i dzielenie potęg o tych samych podstawach|Mnożenie i dzielenie potęg o tych samych podstawach]] {{kompletność krótka|50%|27.10.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie potęgi|Potęgowanie potęgi]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|Potęgowanie iloczynów i ilorazów]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na potęgach|Działania na potęgach]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Notacja wykładnicza dla dużych liczb|Notacja wykładnicza dla dużych liczb]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Notacja wykładnicza dla małych liczb|Notacja wykładnicza dla małych liczb]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pierwiastki|Pierwiastki]] {{kompletność krótka|50%|04.11.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na pierwiastkach|Działania na pierwiastkach]] {{kompletność krótka|25%|06.12.2025}} === III. Wyrażenia algebraiczne === # [[Matematyka dla ostatnich klas szkoły podstawowej/Zastosowania wyrażeń algebraicznych|Zastosowania wyrażeń algebraicznych]] {{kompletność krótka|0%|26.09.2025}} # Podstawianie. Obliczanie wartości liczbowej wyrażenia algebraicznego {{kompletność krótka|0%|26.09.2025}} # Jednomiany i ich właściwości {{kompletność krótka|0%|26.09.2025}} # Wielomiany {{kompletność krótka|0%|26.09.2025}} # Dodawanie i odejmowanie wielomianów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomiana przez jednomian|Mnożenie wielomiana przez jednomian]] {{kompletność krótka|25%|14.01.2026}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomianów|Mnożenie wielomianów]] {{kompletność krótka|100%|21.12.2025}} === IV. Równania === # Zastosowania równań {{kompletność krótka|0%|26.09.2025}} # Liczba spełniające równanie {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Rozwiązywanie równań|Rozwiązywanie równań]] {{kompletność krótka|0%|26.09.2025}} # Zadania tekstowe z wykorzystaniem równań {{kompletność krótka|0%|26.09.2025}} # Przekształcanie wzorów {{kompletność krótka|0%|26.09.2025}} === V. Procenty === # Powiązanie ułamków z procentami {{kompletność krótka|0%|26.09.2025}} # Diagramy procentowe {{kompletność krótka|0%|26.09.2025}} # Obliczanie procentu z danej liczby {{kompletność krótka|0%|26.09.2025}} # Ustalanie jakim procentem jednej liczby jest druga {{kompletność krótka|0%|26.09.2025}} # Znajdowanie liczby gdy podany jest jej procent {{kompletność krótka|0%|26.09.2025}} # Podwyżki i obniżki {{kompletność krótka|0%|26.09.2025}} # Punkty procentowe {{kompletność krótka|0%|26.09.2025}} # Różne obliczenia procentowe {{kompletność krótka|0%|26.09.2025}} # Równania a procenty {{kompletność krótka|0%|26.09.2025}} === VI. Geometria na płaszczyźnie === # Punkty, proste, odcinki {{kompletność krótka|0%|26.09.2025}} # Właściwości kątów {{kompletność krótka|0%|26.09.2025}} # Właściwości trójkątów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Trójkąty przystające|Trójkąty przystające]] {{kompletność krótka|0%|14.03.2026}} # Właściwości czworokątów {{kompletność krótka|0%|26.09.2025}} # Wielokąty foremne {{kompletność krótka|0%|26.09.2025}} # Pole prostokąta {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pola innych wielokątów|Pola innych wielokątów]] {{kompletność krótka|0%|26.09.2025}} # Współrzędne {{kompletność krótka|0%|11.12.2025}} === VII. Geometria przestrzenna === # Różne graniastosłupy {{kompletność krótka|0%|26.09.2025}} # Siatka i pole powierzchni graniastosłupa {{kompletność krótka|0%|26.09.2025}} # Jednostki objętości i objętość prostopadłościanu {{kompletność krótka|0%|26.09.2025}} # Objętość graniastosłupów {{kompletność krótka|0%|26.09.2025}} === VIII. Statystyka === # Dane statystyczne {{kompletność krótka|0%|26.09.2025}} # Średnia {{kompletność krótka|0%|26.09.2025}} # Zbieranie i opracowywanie danych {{kompletność krótka|0%|26.09.2025}} # Losowe zdarzenia {{kompletność krótka|0%|26.09.2025}} == KLASA VIII == === IX. Arytmetyka === # [[Matematyka dla ostatnich klas szkoły podstawowej/System rzymski|System rzymski]] {{kompletność krótka|100%|27.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Podzielność, dzielniki, wielokrotności|Podzielność, dzielniki, wielokrotności]] {{kompletność krótka|75%|02.10.2025}} # Porównywanie liczb {{kompletność krótka|0%|26.09.2025}} # Działania na liczbach {{kompletność krótka|0%|26.09.2025}} # Działania na potęgach i pierwiastkach {{kompletność krótka|0%|26.09.2025}} === X. Algebra === # [[Matematyka dla ostatnich klas szkoły podstawowej/Przekształcanie wyrażeń|Przekształcanie wyrażeń]] {{kompletność krótka|25%|25.04.2026}} # Równania {{kompletność krótka|0%|26.09.2025}} # Proporcje {{kompletność krótka|0%|26.09.2025}} # Proporcjonalność prosta {{kompletność krótka|0%|26.09.2025}} === XI. Planimetria, cz. 1 === # Właściwości trójkątów i czworokątów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Twierdzenie Pitagorasa|Twierdzenie Pitagorasa]] {{kompletność krótka|0%|26.09.2025}} # Do czego stosujemy twierdzenie Pitagorasa? {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Przekątna kwadratu i wysokość w trójkącie równobocznym|Przekątna kwadratu i wysokość w trójkącie równobocznym]] {{kompletność krótka|100%|27.11.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Trójkąty 90°, 45°, 45° oraz 90°, 30°, 60°|Trójkąty 90°, 45°, 45° oraz 90°, 30°, 60°]] {{kompletność krótka|0%|26.09.2025}} # Odcinki a układ współrzędnych {{kompletność krótka|0%|26.09.2025}} # Dowody geometryczne {{kompletność krótka|0%|26.09.2025}} === XII. Planimetria, cz. 2 === # Styczna okręgu {{kompletność krótka|0%|26.09.2025}} # Wzajemne położenie okręgów {{kompletność krótka|0%|26.09.2025}} # π i długość okręgu {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pole koła|Pole koła]] {{kompletność krótka|0%|26.09.2025}} === XIII. Stereometria === # Graniastosłup - pole i objętość {{kompletność krótka|0%|26.09.2025}} # Odcinki w graniastosłupie {{kompletność krótka|0%|26.09.2025}} # Ostrosłupy i ich rodzaje {{kompletność krótka|0%|26.09.2025}} # Siatki i pole powierzchni ostrosłupów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Objętość ostrosłupów|Objętość ostrosłupów]] {{kompletność krótka|50%|05.02.2026}} # Odcinki w ostrosłupach {{kompletność krótka|0%|26.09.2025}} === XIV. Symetria === # Symetria względem prostej {{kompletność krótka|0%|26.09.2025}} # Oś symetrii {{kompletność krótka|0%|26.09.2025}} # Symetralna dowolnego odcinka {{kompletność krótka|0%|26.09.2025}} # Dwusieczna kąta {{kompletność krótka|0%|26.09.2025}} # Symetria względem punktu {{kompletność krótka|0%|26.09.2025}} # Środek symetrii {{kompletność krótka|0%|26.09.2025}} === XV. Matematyka w prawdziwym życiu === # Obliczenia z procentami {{kompletność krótka|0%|26.09.2025}} # Lokaty bankowe, zmiana o dany procent {{kompletność krótka|0%|26.09.2025}} # Podatki {{kompletność krótka|0%|26.09.2025}} # Diagramy {{kompletność krótka|0%|26.09.2025}} # Wykresy {{kompletność krótka|0%|26.09.2025}} # Podział proporcjonalny {{kompletność krótka|0%|26.09.2025}} # Obliczanie prawdopodobieństwa {{kompletność krótka|0%|26.09.2025}} === XVI. Prawdopodobieństwo === # Ile mamy możliwości? Podstawy kombinatoryki {{kompletność krótka|0%|26.09.2025}} # Obliczanie prawdopodobieństw z pomocą kombinatoryki {{kompletność krótka|0%|26.09.2025}} iav7q82oson6ppkahi2lvb7jxul0rlu 559632 559628 2026-10-19T17:36:43Z YxiCode 34510 559632 wikitext text/x-wiki {{Status|-0%|Matematyka|Klasy 7-8 szkoły podstawowej|poziom=Szkoła podstawowa}} Podręcznik jest przeznaczony dla uczniów klasy '''siódmej''' i '''ósmej''' szkoły podstawowej. Dzieli się na dwie główne części: materiał dla klasy VII oraz dla klasy VIII. Obie części obejmują kluczowe zagadnienia z arytmetyki, algebry, geometrii i statystyki. Książka jest zgodna z podstawą programową z 2017 roku, przed jej późniejszym uszczupleniem. Jest ona gotowa w '''{{#expr: floor ((7.75 / 96) * 100 * 100 + 0.5) / 100 }}%'''. Wymagania: Wiedza z klas IV-VI. '''[[Matematyka dla ostatnich klas szkoły podstawowej/Odpowiedzi do zadań|Odpowiedzi do zadań]]''' Poniżej znajduje się spis treści: == Wstęp == # [[Matematyka dla ostatnich klas szkoły podstawowej/Legenda|Legenda]] # [[Matematyka dla ostatnich klas szkoły podstawowej/Cenne źródła informacji|Cenne źródła informacji]] == KLASA VII == === I. Działania na liczbach === # [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb|Rodzaje liczb]] {{kompletność krótka|50%|19.10.2026}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczby wymiernej|Postać dziesiętna liczby wymiernej]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Przybliżenia - zaokrąglanie i szacowanie|Przybliżenia - zaokrąglanie i szacowanie]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Oś liczbowa|Oś liczbowa]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Dodawanie i odejmowanie liczb dodatnich|Dodawanie i odejmowanie liczb dodatnich]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie i dzielenie liczb dodatnich|Mnożenie i dzielenie liczb dodatnich]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na liczbach dodatnich i ujemnych|Działania na liczbach dodatnich i ujemnych]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Łączenie działań. Wyrażenia arytmetyczne|Łączenie działań. Wyrażenia arytmetyczne]] {{kompletność krótka|0%|26.09.2025}} === II. Potęgowanie i pierwiastkowanie === # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęga o wykładniku naturalnym|Potęga o wykładniku naturalnym]] {{kompletność krótka|100%|10.10.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie i dzielenie potęg o tych samych podstawach|Mnożenie i dzielenie potęg o tych samych podstawach]] {{kompletność krótka|50%|27.10.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie potęgi|Potęgowanie potęgi]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|Potęgowanie iloczynów i ilorazów]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na potęgach|Działania na potęgach]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Notacja wykładnicza dla dużych liczb|Notacja wykładnicza dla dużych liczb]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Notacja wykładnicza dla małych liczb|Notacja wykładnicza dla małych liczb]] {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pierwiastki|Pierwiastki]] {{kompletność krótka|50%|04.11.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Działania na pierwiastkach|Działania na pierwiastkach]] {{kompletność krótka|25%|06.12.2025}} === III. Wyrażenia algebraiczne === # [[Matematyka dla ostatnich klas szkoły podstawowej/Zastosowania wyrażeń algebraicznych|Zastosowania wyrażeń algebraicznych]] {{kompletność krótka|0%|26.09.2025}} # Podstawianie. Obliczanie wartości liczbowej wyrażenia algebraicznego {{kompletność krótka|0%|26.09.2025}} # Jednomiany i ich właściwości {{kompletność krótka|0%|26.09.2025}} # Wielomiany {{kompletność krótka|0%|26.09.2025}} # Dodawanie i odejmowanie wielomianów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomiana przez jednomian|Mnożenie wielomiana przez jednomian]] {{kompletność krótka|25%|14.01.2026}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomianów|Mnożenie wielomianów]] {{kompletność krótka|100%|21.12.2025}} === IV. Równania === # Zastosowania równań {{kompletność krótka|0%|26.09.2025}} # Liczba spełniające równanie {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Rozwiązywanie równań|Rozwiązywanie równań]] {{kompletność krótka|0%|26.09.2025}} # Zadania tekstowe z wykorzystaniem równań {{kompletność krótka|0%|26.09.2025}} # Przekształcanie wzorów {{kompletność krótka|0%|26.09.2025}} === V. Procenty === # Powiązanie ułamków z procentami {{kompletność krótka|0%|26.09.2025}} # Diagramy procentowe {{kompletność krótka|0%|26.09.2025}} # Obliczanie procentu z danej liczby {{kompletność krótka|0%|26.09.2025}} # Ustalanie jakim procentem jednej liczby jest druga {{kompletność krótka|0%|26.09.2025}} # Znajdowanie liczby gdy podany jest jej procent {{kompletność krótka|0%|26.09.2025}} # Podwyżki i obniżki {{kompletność krótka|0%|26.09.2025}} # Punkty procentowe {{kompletność krótka|0%|26.09.2025}} # Różne obliczenia procentowe {{kompletność krótka|0%|26.09.2025}} # Równania a procenty {{kompletność krótka|0%|26.09.2025}} === VI. Geometria na płaszczyźnie === # Punkty, proste, odcinki {{kompletność krótka|0%|26.09.2025}} # Właściwości kątów {{kompletność krótka|0%|26.09.2025}} # Właściwości trójkątów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Trójkąty przystające|Trójkąty przystające]] {{kompletność krótka|0%|14.03.2026}} # Właściwości czworokątów {{kompletność krótka|0%|26.09.2025}} # Wielokąty foremne {{kompletność krótka|0%|26.09.2025}} # Pole prostokąta {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pola innych wielokątów|Pola innych wielokątów]] {{kompletność krótka|0%|26.09.2025}} # Współrzędne {{kompletność krótka|0%|11.12.2025}} === VII. Geometria przestrzenna === # Różne graniastosłupy {{kompletność krótka|0%|26.09.2025}} # Siatka i pole powierzchni graniastosłupa {{kompletność krótka|0%|26.09.2025}} # Jednostki objętości i objętość prostopadłościanu {{kompletność krótka|0%|26.09.2025}} # Objętość graniastosłupów {{kompletność krótka|0%|26.09.2025}} === VIII. Statystyka === # Dane statystyczne {{kompletność krótka|0%|26.09.2025}} # Średnia {{kompletność krótka|0%|26.09.2025}} # Zbieranie i opracowywanie danych {{kompletność krótka|0%|26.09.2025}} # Losowe zdarzenia {{kompletność krótka|0%|26.09.2025}} == KLASA VIII == === IX. Arytmetyka === # [[Matematyka dla ostatnich klas szkoły podstawowej/System rzymski|System rzymski]] {{kompletność krótka|100%|27.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Podzielność, dzielniki, wielokrotności|Podzielność, dzielniki, wielokrotności]] {{kompletność krótka|75%|02.10.2025}} # Porównywanie liczb {{kompletność krótka|0%|26.09.2025}} # Działania na liczbach {{kompletność krótka|0%|26.09.2025}} # Działania na potęgach i pierwiastkach {{kompletność krótka|0%|26.09.2025}} === X. Algebra === # [[Matematyka dla ostatnich klas szkoły podstawowej/Przekształcanie wyrażeń|Przekształcanie wyrażeń]] {{kompletność krótka|25%|25.04.2026}} # Równania {{kompletność krótka|0%|26.09.2025}} # Proporcje {{kompletność krótka|0%|26.09.2025}} # Proporcjonalność prosta {{kompletność krótka|0%|26.09.2025}} === XI. Planimetria, cz. 1 === # Właściwości trójkątów i czworokątów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Twierdzenie Pitagorasa|Twierdzenie Pitagorasa]] {{kompletność krótka|0%|26.09.2025}} # Do czego stosujemy twierdzenie Pitagorasa? {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Przekątna kwadratu i wysokość w trójkącie równobocznym|Przekątna kwadratu i wysokość w trójkącie równobocznym]] {{kompletność krótka|100%|27.11.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Trójkąty 90°, 45°, 45° oraz 90°, 30°, 60°|Trójkąty 90°, 45°, 45° oraz 90°, 30°, 60°]] {{kompletność krótka|0%|26.09.2025}} # Odcinki a układ współrzędnych {{kompletność krótka|0%|26.09.2025}} # Dowody geometryczne {{kompletność krótka|0%|26.09.2025}} === XII. Planimetria, cz. 2 === # Styczna okręgu {{kompletność krótka|0%|26.09.2025}} # Wzajemne położenie okręgów {{kompletność krótka|0%|26.09.2025}} # π i długość okręgu {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Pole koła|Pole koła]] {{kompletność krótka|0%|26.09.2025}} === XIII. Stereometria === # Graniastosłup - pole i objętość {{kompletność krótka|0%|26.09.2025}} # Odcinki w graniastosłupie {{kompletność krótka|0%|26.09.2025}} # Ostrosłupy i ich rodzaje {{kompletność krótka|0%|26.09.2025}} # Siatki i pole powierzchni ostrosłupów {{kompletność krótka|0%|26.09.2025}} # [[Matematyka dla ostatnich klas szkoły podstawowej/Objętość ostrosłupów|Objętość ostrosłupów]] {{kompletność krótka|50%|05.02.2026}} # Odcinki w ostrosłupach {{kompletność krótka|0%|26.09.2025}} === XIV. Symetria === # Symetria względem prostej {{kompletność krótka|0%|26.09.2025}} # Oś symetrii {{kompletność krótka|0%|26.09.2025}} # Symetralna dowolnego odcinka {{kompletność krótka|0%|26.09.2025}} # Dwusieczna kąta {{kompletność krótka|0%|26.09.2025}} # Symetria względem punktu {{kompletność krótka|0%|26.09.2025}} # Środek symetrii {{kompletność krótka|0%|26.09.2025}} === XV. Matematyka w prawdziwym życiu === # Obliczenia z procentami {{kompletność krótka|0%|26.09.2025}} # Lokaty bankowe, zmiana o dany procent {{kompletność krótka|0%|26.09.2025}} # Podatki {{kompletność krótka|0%|26.09.2025}} # Diagramy {{kompletność krótka|0%|26.09.2025}} # Wykresy {{kompletność krótka|0%|26.09.2025}} # Podział proporcjonalny {{kompletność krótka|0%|26.09.2025}} # Obliczanie prawdopodobieństwa {{kompletność krótka|0%|26.09.2025}} === XVI. Prawdopodobieństwo === # Ile mamy możliwości? Podstawy kombinatoryki {{kompletność krótka|0%|26.09.2025}} # Obliczanie prawdopodobieństw z pomocą kombinatoryki {{kompletność krótka|0%|26.09.2025}} e5iejpecop1847y7jh66cyq52ooxx8y Wikipedysta:YxiCode 2 61593 559620 559545 2026-10-19T14:08:58Z YxiCode 34510 559620 wikitext text/x-wiki {{Multiuserbox |pl-N |en-5 |de-1 |mat |m |{{Staż|dzień=26|miesiąc=09|rok=2025}} }} Pochodzę z Żagania i jestem uczniem klasy VIII szkoły podstawowej. Uczestniczę w konkursach kuratoryjnych (m.in. z matematyki i języka angielskiego) oraz stale kształcę się z zakresu przedmiotów ścisłych. Jestem twórcą ''[[Matematyka dla ostatnich klas szkoły podstawowej|Matematyki dla ostatnich klas szkoły podstawowej]]'', którą każdy może edytować. Wprawdzie nie jest ona dokończona - lecz staram się nanosić poprawki, wprowadzać nowe pojęcia w sposób intuicyjny oraz tworzyć własne schematy, rysunki i diagramy. Jestem przeciwnikiem korzystania ze sztucznej inteligencji do prac kreatywnych, takich właśnie jak '''pisanie podręczników''' lub tworzenie obrazów. Jeżeli ty, Czytelniku mojego profilu, masz jakieś pytania, proszę do mnie napisać na dyskusji. '''Zobacz!''' * [[Wikipedysta:YxiCode/Brudnopis|"Odchudzenie" strony głównej]] - jaka powinna być treść, zanim zostanie zmieniona szata graficzna == Bardzo skrótowy mini-dzienik == * '''14 III 2026''' - Rzadziej tu zaglądam ze względu na to, że mam dość dużo nauki w szkole (7 kartkówek i sprawdzianów). Ale jak mam czas to coś napiszę. * '''23 IV 2026''' - To samo co wcześniej. Ciągle muszę się czegoś uczyć. Po poniedziałku mam nadzieję że będę miał czas. * '''18 X 2026''' - Jestem w 8. klasie więc biorę się do pracy. Rygorystycznie oceniłem podręcznik pt. "Przyroda" a zarazem dodałem wiele informacji do swojej książki. Jutro mam egzamin próbny z j. polskiego. * '''19 X 2026''' - W sumie to nawet dobrze poszedł egzamin ale jestem zmęczony qh7rki2hxriskuf8r2fyzq5z1dkn8rg 559626 559620 2026-10-19T16:14:58Z YxiCode 34510 /* Bardzo skrótowy mini-dzienik */ 559626 wikitext text/x-wiki {{Multiuserbox |pl-N |en-5 |de-1 |mat |m |{{Staż|dzień=26|miesiąc=09|rok=2025}} }} Pochodzę z Żagania i jestem uczniem klasy VIII szkoły podstawowej. Uczestniczę w konkursach kuratoryjnych (m.in. z matematyki i języka angielskiego) oraz stale kształcę się z zakresu przedmiotów ścisłych. Jestem twórcą ''[[Matematyka dla ostatnich klas szkoły podstawowej|Matematyki dla ostatnich klas szkoły podstawowej]]'', którą każdy może edytować. Wprawdzie nie jest ona dokończona - lecz staram się nanosić poprawki, wprowadzać nowe pojęcia w sposób intuicyjny oraz tworzyć własne schematy, rysunki i diagramy. Jestem przeciwnikiem korzystania ze sztucznej inteligencji do prac kreatywnych, takich właśnie jak '''pisanie podręczników''' lub tworzenie obrazów. Jeżeli ty, Czytelniku mojego profilu, masz jakieś pytania, proszę do mnie napisać na dyskusji. '''Zobacz!''' * [[Wikipedysta:YxiCode/Brudnopis|"Odchudzenie" strony głównej]] - jaka powinna być treść, zanim zostanie zmieniona szata graficzna == Bardzo skrótowy mini-dzienik == * '''14 III 2026''' - Rzadziej tu zaglądam ze względu na to, że mam dość dużo nauki w szkole (7 kartkówek i sprawdzianów). Ale jak mam czas to coś napiszę. * '''23 IV 2026''' - To samo co wcześniej. Ciągle muszę się czegoś uczyć. Po poniedziałku mam nadzieję że będę miał czas. * '''18 X 2026''' - Jestem w 8. klasie więc biorę się do pracy. Rygorystycznie oceniłem podręcznik pt. "Przyroda" a zarazem dodałem wiele informacji do swojej książki. Jutro mam egzamin próbny z j. polskiego. * '''19 X 2026''' - W sumie to nawet dobrze poszedł egzamin ale jestem zmęczony. Jutro egzamin z matematyki. Dobrze mi idzie fizyka (6 ze sprawdzianu dot. elektrostatyki). r6lsa3qhfe14dios7mqexqjxsft86qz Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomianów 0 62337 559631 528603 2026-10-19T17:24:18Z YxiCode 34510 559631 wikitext text/x-wiki == Teoria == === Interpretacja geometryczna === Iloczyn sum algebraicznych można przedstawić jako pole prostokąta. Jeśli boki prostokąta mają długości <math>(a+b)</math> oraz <math>(c+d)</math>, to jego pole <math>P</math> wynosi: <math>P = (a+b)(c+d)</math> Prostokąt ten można podzielić na cztery mniejsze prostokąty o polach: <math>ac</math>, <math>ad</math>, <math>bc</math> i <math>bd</math>. Suma pól małych prostokątów jest równa polu dużego prostokąta. [[Plik:Interpretacja geometryczna mnożenia wielomianów.svg|300px|centruj]] Stąd się bierze zasada opisana w następnej części. === Mnożenie dwumianu przez dwumian === Podstawową zasadą mnożenia sum algebraicznych jest prawo rozdzielności mnożenia względem dodawania. Aby pomnożyć dwie sumy (np. dwa nawiasy), musimy pomnożyć każdy wyraz z pierwszego nawiasu przez każdy wyraz z drugiego nawiasu. Zatem: {{Mat:Tw |<math>(a+b)(c+d)=ac+ad+bc+bd</math> }} {{Mat:Prz |Wykonaj mnożenie: <math>(x+2)(y-3)</math> Mnożymy po kolei. 1. <math>x\cdot y=xy</math> 2. <math>x\cdot(-3)=-3x</math> 3. <math>2\cdot y=2y</math> 4. <math>2\cdot(-3)=-6</math> Zapisujemy wynik: <math>(x+2)(y-3)=xy-3x+2y-6</math> Ten sam sposób przedstawiono na tej animacji: [[Plik:Mnożenie dwumianów.gif|400px|bezramki]] }} === Mnożenie dowolnych sum algebraicznych === Zasada mnożenia dwumianów obowiązuje niezależnie od liczby wyrazów w nawiasach. Jeśli w pierwszym nawiasie są 2 wyrazy, a w drugim 3, w wyniku otrzymamy początkowo <math>2\cdot3=6</math> składników. {{Mat:Prz |Wykonaj mnożenie: <math>(x-2)(x^2+3x-1)</math> <math>(x-2)(x^2+3x-1)=\color{red}x(x^2+3x-1)\color{green}-2(x^2+3x-1)\color{black}</math> <math>=\color{red}x^3+3x^2-x\color{green}-2x^2-6x+2</math> }} === Doprowadzanie wyrażenia do prostszej postaci === Samo wymnożenie nawiasów to najczęściej dopiero połowa zadania. Aby otrzymać ostateczny wynik, należy wykonać redukcję wyrazów podobnych. {{Mat:Prz |Uprość wyrażenie <math>(2x+1)(x-3)-(x^2-4)</math>. 1. Mnożymy sumy algebraiczne. <math>(2x+1)(x-3)=2x^2-6x+x-3</math> 2. Opuszczamy drugi nawias (pamiętając o zmianie znaków, bo przed nawiasem stoi minus) i składamy całe wyrażenie. <math>2x^2-6x+x-3-x^2+4</math> 3. Redukujemy wyrazy podobne. <math>x^2-5x+1</math> }} === Zastosowania w zadaniach tekstowych === Mnożenie sum algebraicznych jest niezbędne przy rozwiązywaniu zadań, w których zmieniamy parametry figur geometrycznych lub operujemy na nieznanych wielkościach. {{Mat:Prz |Bok kwadratu ma długość <math>x</math>. Jeden bok wydłużono o 2 cm, a drugi skrócono o 1 cm, otrzymując prostokąt. Zapisz pole tego prostokąta w postaci sumy algebraicznej. Boki nowego prostokąta to <math>(x+2)</math> i <math>(x-1)</math>. Pole <math>P=(x+2)(x-1)</math>. <math>P=x^2+x-2[\text{cm}^2]</math> }} == Zadania == '''1.''' Wykonaj mnożenie i zredukuj wyrazy podobne. <ol type="a"> <li><math>(x+3)(x+5)</math></li> <li><math>(a-2)(a+7)</math></li> </ol> '''2.''' Zapisz w postaci sumy algebraicznej. <ol type="a"> <li><math>(2x+1)(x-4)</math></li> <li><math>(3k-2)(2k-3)</math></li> </ol> '''3.''' Wykonaj mnożenie. <ol type="a"> <li><math>(x+2y)(x-y)</math></li> <li><math>(3a-b)(2a+4b)</math></li> </ol> '''4.''' Pomnóż <math>(x+2)(x^2-2x+4)</math> i zredukuj wyrazy podobne. '''5.''' Wykonaj mnożenie trzech sum algebraicznych: <math>(x-1)(x+1)(x+2)</math> '''6.''' Wykonaj mnożenie: <math>(a^2-a+1)(a+2)</math> '''7.''' Doprowadź wyrażenia do najprostszej postaci. <ol type="a"> <li><math>(3x+1)(x-2)+(x+3)(2x-1)</math></li> <li><math>(2a-3)(a+4)-(2a+1)(a-2)</math></li> </ol> '''8.''' Uprość wyrażenie <math>3x(x-4)-(x-5)(3x+2)</math>, a następnie oblicz jego wartość liczbową dla <math>x=-2</math>. '''9.''' Boki prostokąta opisane są wyrażeniami <math>x+3</math> oraz <math>x+5</math>. <ol type="a"> <li>Zapisz pole tego prostokąta w postaci iloczynu.</li> <li>Przekształć ten iloczyn na sumę algebraiczną.</li> </ol> '''10.''' W dużym prostokącie o bokach długości <math>a</math> i <math>b</math> zwiększono długość boku <math>a</math> o 2, a boku <math>b</math> o 3. <ol type="a"> <li>Sporządź rysunek pomocniczy.</li> <li>Zapisz pole nowego prostokąta jako sumę czterech składników.</li> </ol> '''11.''' Dany jest kwadrat o boku <math>x</math>. Jeden jego bok wydłużono o 4 cm, a drugi skrócono o 3 cm, otrzymując prostokąt. Zapisz pole otrzymanego prostokąta w postaci sumy algebraicznej. '''12.''' Grzegorz pomyślał o pewnej liczbie. Oznaczył ją jako <math>n</math>. Pomnożył liczbę o 2 większą od <math>n</math> przez liczbę o 3 mniejszą od <math>n</math>. Zapisz wynik tego działania w najprostszej postaci. '''13.''' Długość prostokątnej działki jest o 5 metrów większa od jej szerokości. Oznacz szerokość jako <math>x</math>. <ol type="a"> <li>Zapisz wymiary tej działki.</li> <li>Gdyby szerokość działki zwiększyć o 2 m, a długość zmniejszyć o 1 m, jak wyraziłoby się jej pole? Zapisz odpowiednie wyrażenie i uprość je.</li> </ol> '''14.''' W kinie jest <math>r</math> rzędów, a w każdym rzędzie jest <math>m</math> miejsc. Planowany jest remont, po którym liczba rzędów zwiększy się o 2, a liczba miejsc w każdym rzędzie zmniejszy się o 1. Zapisz wyrażenie opisujące różnicę między nową a starą liczbą miejsc w kinie. Czy liczba miejsc na pewno wzrośnie? '''15.''' Wykaż, że dla dowolnej liczby rzeczywistej <math>x</math> wartość wyrażenia <math>(x-2)(x+2)-(x-3)(x+3)</math> nie zależy od <math>x</math>. '''*16.''' Udowodnij, że iloczyn dwóch kolejnych liczb całkowitych zwiększony o większą z nich jest równy kwadratowi tej większej liczby. '''*17.''' Wykaż, że dla każdej liczby naturalnej <math>n</math>, liczba postaci <math>(n+2)(n+3)-(n-2)(n+7)</math> jest podzielna przez 10. {{Nawigacja|Matematyka dla ostatnich klas szkoły podstawowej| [[Matematyka dla ostatnich klas szkoły podstawowej/Mnożenie wielomiana przez jednomian|Mnożenie wielomiana przez jednomian]]| [[Matematyka dla ostatnich klas szkoły podstawowej/Zastosowania równań|Zastosowania równań]]| }}</noinclude> 311eul1zn25oco4b7xaw84b9m9m01a1 Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom VII 4 63922 559607 559606 2026-10-19T12:07:15Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559607 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne,a jak jest w przypadku przeciwnym{{dk}} ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> n2s4kada7fad7x7y28t33bn4aggfui2 559608 559607 2026-10-19T12:14:44Z Persino 2851 /* Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści */ 559608 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne,a jak jest w przypadku przeciwnym{{dk}} ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> sl7ilfstx0i5g314tfe5m4aqjhhjexx 559609 559608 2026-10-19T12:26:53Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559609 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A póxniejjest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> a37u11s19611fdiysomaiy9si3mz56y 559610 559609 2026-10-19T12:27:41Z Persino 2851 /* Obsługa linków nieokładkowych (dozwolonych) artykułów książki */ 559610 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A póxniejjest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ijppi87m8rkoa6w6a8x37oy0818st7q 559611 559610 2026-10-19T12:29:08Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559611 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A póxniejjest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> oyqg6975xxrq00cbh28n1ed16nepj7j 559612 559611 2026-10-19T12:30:09Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559612 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> rwumkv58oxdo9nvh6t0kym05uabu9jp 559613 559612 2026-10-19T12:42:52Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559613 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych w jako: ; Nadawanie wartości pewnym zmiennym{{dk}} ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 5nz2620wboyobb6yq0pu8w7kk96zhbb 559614 559613 2026-10-19T12:44:59Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559614 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fxon66f7op3fuffn5l60m6edroiha7r 559615 559614 2026-10-19T12:47:27Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559615 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: * Przeciwnie: {{Tt|przeciwnie}}: ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> b1azmr8ofdy5h2hv5uocfplr17u66rr 559616 559615 2026-10-19T13:10:58Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559616 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy druga zmienna jest {{Code|true}}, przeciwnie zwraca {{Code|false}} z pierwszą początkową wartością. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: ; Kiedy pętla nadrzędna jest przerywana{{dk}} ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> c8n8u8sx4k7laqrudabe6xcqsvr0t3i 559617 559616 2026-10-19T13:15:22Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559617 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy druga zmienna jest {{Code|true}}, przeciwnie zwraca {{Code|false}} z pierwszą początkową wartością. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> m4fh1pk8akon9p5mw0bgxfn69hg98m2 559618 559617 2026-10-19T13:15:45Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559618 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy druga zmienna jest {{Code|true}}, przeciwnie zwraca {{Code|false}} z pierwszą początkową wartością. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1r41bl5xna8385crxdvncxlc8dz8qsk 559619 559618 2026-10-19T13:52:11Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559619 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy druga zmienna jest {{Code|true}}, przeciwnie zwraca {{Code|false}} z pierwszą początkową wartością. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> a3fphggczhgx6msteakudrv91qwef82 559638 559619 2026-10-19T22:36:45Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559638 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> jheu6kobyy1a6zqk2p9a47cfb28138l 559639 559638 2026-10-19T23:10:44Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559639 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}},i sprawdzamy czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> fx1ti7i8g7rk8bgaefu255s95z2fcna 559640 559639 2026-10-19T23:11:27Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559640 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}},i sprawdzamy czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h6n5t27xy7e26zud67iorh8ykuj44lu 559641 559640 2026-10-19T23:23:43Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559641 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkPatrz|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednk się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwóconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}},i sprawdzamy czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> l94cscp8c1sh79nfe0bib0p6l2583mb 559642 559641 2026-10-19T23:26:56Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559642 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1asbh0degvqgq51ew4hxp6re7uls5m5 559643 559642 2026-10-19T23:31:49Z Persino 2851 /* Sprawdzanie aktualnej pozycji linkowej */ 559643 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> tw9b2u60n2tfx625he4bbdggxtlc5c9 559644 559643 2026-10-19T23:36:44Z Persino 2851 /* Zebrane dane o początku ustalenia właściwego spisu */ 559644 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> hqsvru6npoc1zme5d0im8faxr3ui4h3 559645 559644 2026-10-19T23:37:40Z Persino 2851 /* Zebrane dane o początku ustalenia właściwego spisu */ 559645 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> aeblkwkqim90nly85sians1yuo41k74 559652 559645 2026-10-20T09:54:58Z Persino 2851 /* Punkt końcowy */ 559652 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> pm92daz85kelpsf4lmd2qajqxhujdo4 559653 559652 2026-10-20T09:56:14Z Persino 2851 /* Punkt końcowy */ 559653 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 71kn661psrperubnsh7ob2x0qebn7qd 559654 559653 2026-10-20T10:02:28Z Persino 2851 /* Znajdowanie pierwszego artykułu książki */ 559654 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 22krutn67ssajwupkgjb78s6tkj6azh 559655 559654 2026-10-20T10:03:23Z Persino 2851 /* Punkt końcowy */ 559655 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> esikbcv3c41trs5438bwtpfs2nppuui 559656 559655 2026-10-20T10:14:48Z Persino 2851 /* Punkt końcowy */ 559656 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 4gre53e9o3eyubl6vshtnle52oehb1t 559657 559656 2026-10-20T10:25:14Z Persino 2851 /* Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika */ 559657 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dvxe9f6krqpep6vn6fs55qup39cvsgo 559658 559657 2026-10-20T10:29:04Z Persino 2851 /* Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika */ 559658 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> p6lz6lc0s2pkziwuhpznmdkdx6fc57r 559659 559658 2026-10-20T10:40:09Z Persino 2851 /* Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika */ 559659 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> av77iyex69yl05c5w2wx9d50lx95qjw 559660 559659 2026-10-20T10:57:56Z Persino 2851 /* Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika */ 559660 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 47ogktupynm5376e0u28jmuza7mgqq5 559661 559660 2026-10-20T11:03:30Z Persino 2851 /* Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne */ 559661 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Co uzyskaliśmy z danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight>> * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{Patrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ro1lx96fzg1xpe3ecoixrem6a5cgyz1 559662 559661 2026-10-20T11:03:47Z Persino 2851 /* Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne */ 559662 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Co uzyskaliśmy z danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{Patrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> e8isusjpdsrhcet9eaf7fb2px1gva5f 559663 559662 2026-10-20T11:14:13Z Persino 2851 /* Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne */ 559663 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon| _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskaliśmy z danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> les6i1ck1edsa32zfxsb7yq7oiqeayf 559664 559663 2026-10-20T11:14:48Z Persino 2851 /* Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne */ 559664 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskaliśmy z danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dmpvto81o1p2qaklybhwkfpk0977sn8 559665 559664 2026-10-20T11:16:17Z Persino 2851 /* Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne */ 559665 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 0vc6zti3m4j13gm6kuxuiqnlndvi4ar 559666 559665 2026-10-20T11:25:00Z Persino 2851 /* Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów */ 559666 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== Z danych początkowych: {{Code|obiekt}} {{LinkPatrz|obiekt}} (jest to nic innego jak: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}), i {{Code|kod}} {{LinkPatrz|kod}} (uzyskanego z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}), tylko jest to wersja liczbowa, a nie znakowa. Na podstawie tego uzyskujemy, wnętrze kodu z: {{Code|szablon}} {{LinkPatrz|szablon}}, lub z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, uzyskanego z kluczy: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> o0p38otvwwc6knkqetgww1q1k8o95os 559667 559666 2026-10-20T11:31:19Z Persino 2851 /* Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów */ 559667 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== Z danych początkowych: {{Code|obiekt}} {{LinkPatrz|obiekt}} (jest to nic innego jak: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}), i {{Code|kod}} {{LinkPatrz|kod}} (uzyskanego z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}), tylko jest to wersja liczbowa, a nie znakowa. Na podstawie tego uzyskujemy, wnętrze kodu z: {{Code|szablon}} {{LinkPatrz|szablon}}, lub z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, uzyskanego z kluczy: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Jeśli jest spełnione, tzn. zależność od punktu początkowego spisu właściwego w zależności od prawdopodobnego punktu końcowego, który mamy ustalić: <syntaxhighlight lang="lua"> if(liczba_start<=liczba_obiekt_start)then </syntaxhighlight> A jeśli jest spełniona ta instrukcja warunkowa, wtedy jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}.ona sprawdza, czy parametry: {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}, czy są kodami linków, a jeśli nie, to czy w: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są linki, a jeśli je tam znalazł, to funkcja zwraca wartość prawdziwą. ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> k9v4okyrr7dpc7wovp8246mf4wekhbn 559669 559667 2026-10-20T11:41:02Z Persino 2851 /* Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów */ 559669 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== Z danych początkowych: {{Code|obiekt}} {{LinkPatrz|obiekt}} (jest to nic innego jak: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}), i {{Code|kod}} {{LinkPatrz|kod}} (uzyskanego z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}), tylko jest to wersja liczbowa, a nie znakowa. Na podstawie tego uzyskujemy, wnętrze kodu z: {{Code|szablon}} {{LinkPatrz|szablon}}, lub z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, uzyskanego z kluczy: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Jeśli jest spełnione, tzn. zależność od punktu początkowego spisu właściwego w zależności od prawdopodobnego punktu końcowego, który mamy ustalić: <syntaxhighlight lang="lua"> if(liczba_start<=liczba_obiekt_start)then </syntaxhighlight> A jeśli jest spełniona ta instrukcja warunkowa, wtedy jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}.ona sprawdza, czy parametry: {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}, czy są kodami linków, a jeśli nie, to czy w: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są linki, a jeśli je tam znalazł, to funkcja zwraca {{ZobaczTeż|kiedy linki}} wartość prawdziwą. Kiedy jest prawdziwe {{LinkZobaczTeż|kiedy linki}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|p.PoliczKoniecZakodowanegoTekstuArtykularnego|StronicowyParser/AnalizaSpisuRzeczy/Tom VI}}, co ona wyszukuje niepustą linie nielistową pod spodem tego tekstu pod pozycją wskazywaną w tej zmiennej, co po wywołaniu tej funkcji pętla jest przerywana. Funkcja liczy koniec spisu właściwego {{Code|liczba_koniec}} {{Patrz|liczba_koniec}}, który trzeba skorygować. ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> eaepaw9t6n3lrkbl0dokmzufsmcrm1d 559670 559669 2026-10-20T11:41:20Z Persino 2851 /* Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów */ 559670 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== Z danych początkowych: {{Code|obiekt}} {{LinkPatrz|obiekt}} (jest to nic innego jak: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}), i {{Code|kod}} {{LinkPatrz|kod}} (uzyskanego z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}), tylko jest to wersja liczbowa, a nie znakowa. Na podstawie tego uzyskujemy, wnętrze kodu z: {{Code|szablon}} {{LinkPatrz|szablon}}, lub z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, uzyskanego z kluczy: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Jeśli jest spełnione, tzn. zależność od punktu początkowego spisu właściwego w zależności od prawdopodobnego punktu końcowego, który mamy ustalić: <syntaxhighlight lang="lua"> if(liczba_start<=liczba_obiekt_start)then </syntaxhighlight> A jeśli jest spełniona ta instrukcja warunkowa, wtedy jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}.ona sprawdza, czy parametry: {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}, czy są kodami linków, a jeśli nie, to czy w: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są linki, a jeśli je tam znalazł, to funkcja zwraca {{ZobaczTeż|kiedy linki}} wartość prawdziwą. Kiedy jest prawdziwe {{LinkZobaczTeż|kiedy linki}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|p.PoliczKoniecZakodowanegoTekstuArtykularnego|StronicowyParser/AnalizaSpisuRzeczy/Tom VI}}, co ona wyszukuje niepustą linie nielistową pod spodem tego tekstu pod pozycją wskazywaną w tej zmiennej, co po wywołaniu tej funkcji pętla jest przerywana. Funkcja liczy koniec spisu właściwego: {{Code|liczba_koniec}} {{Patrz|liczba_koniec}}, który trzeba skorygować. ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 2qvrgagug08ayolxzqhhexup1dvi7g6 559671 559670 2026-10-20T11:45:46Z Persino 2851 /* Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów */ 559671 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ; Znajdowanie końca spisu właściwego treści{{dk}} {{nobold|{{Code|liczba_start}}}}, który trzeba skorygować{{dk}} Z danych początkowych: {{Code|obiekt}} {{LinkPatrz|obiekt}} (jest to nic innego jak: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}), i {{Code|kod}} {{LinkPatrz|kod}} (uzyskanego z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}), tylko jest to wersja liczbowa, a nie znakowa. Na podstawie tego uzyskujemy, wnętrze kodu z: {{Code|szablon}} {{LinkPatrz|szablon}}, lub z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, uzyskanego z kluczy: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Jeśli jest spełnione, tzn. zależność od punktu początkowego spisu właściwego w zależności od prawdopodobnego punktu końcowego, który mamy ustalić: <syntaxhighlight lang="lua"> if(liczba_start<=liczba_obiekt_start)then </syntaxhighlight> A jeśli jest spełniona ta instrukcja warunkowa, wtedy jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}.ona sprawdza, czy parametry: {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}, czy są kodami linków, a jeśli nie, to czy w: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są linki, a jeśli je tam znalazł, to funkcja zwraca {{ZobaczTeż|kiedy linki}} wartość prawdziwą. Kiedy jest prawdziwe {{LinkZobaczTeż|kiedy linki}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|p.PoliczKoniecZakodowanegoTekstuArtykularnego|StronicowyParser/AnalizaSpisuRzeczy/Tom VI}}, co ona wyszukuje niepustą linie nielistową pod spodem tego tekstu pod pozycją wskazywaną w tej zmiennej, co po wywołaniu tej funkcji pętla jest przerywana. Funkcja liczy koniec spisu właściwego: {{Code|liczba_koniec}} {{Patrz|liczba_koniec}}, który trzeba skorygować. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> k9r082di0uim1zj1amkffo5iqyamrz8 559672 559671 2026-10-20T11:56:23Z Persino 2851 /* Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika */ 559672 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizaSpisuRzeczy}}{{Code|p.AnalizaSpisuRzeczy}} == Funkcja służy z zakodowanego i z przetworzonego tekstu artykułu danego spisu, wydzielić z niej właściwy fragment, który jest tym odpowiednim spisem treści. Funkcja uwzględnia w swojej budowie, że on ma w sobie zawierać również szablony przypisów: jak: {{s|Przypisy}}, i licencji jak: {{s|Licencja}}, robi to za pomocą odpowiednich funkcji korekcji (korygowania) wydzielonego spisu. === Parametry funkcji === Przedstawimy tutaj fragment definicji tej funkcji, a także opis odnośnikowy jej parametrów. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,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,tab_nazwa_spisow_przekierowaniowych)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}. | komórka2 = tak }} === Parametry zwracane === * Funkcja zwraca wydzielony tekst spis treści z tekstu zakodowanego i przetworzonego artykułu (spisu książki - podręcznika). <syntaxhighlight lang="lua"> --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((licencja_koniec)and(licencja_koniec>=liczba_koniec))then liczba_koniec=licencja_koniec; end; ---- Wydzielenie właściwego spisu treści z całej treści zakodowanego artykułu spisu; local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ---- Korygowanie danych wydzielonego spisu według powyższej metody, korekcja odbywa się po wszystkich możliwościach tabeli; for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do ---- Kolejne iteracje korekcji odpowiedniego spisu, kolejnymi krokami według poniższej funkcji; tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; ---- Zwracanie wydzielonego i skorygowanego spisu treści; return tekst; </syntaxhighlight> === Wydzielanie właściwego spisu treści, liczenie punktów granicznych === Za pomocą tych dwóch liczb granicznych, punktu startowego i końcowego, będziemy wydzielać właściwy tekst spisu treści z całości zakodowanego spisu treści, ale najpierw te dwie liczby musimy wyznaczyć za pomocą pewnych ustalonych procedur. Będziemy to robić za pomocą funkcji w module: {{Code|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}}}. ==== Punkt startowy ==== Będziemy tu znajdować punkt startowy, przed którym tekst zostanie ucięty w wyniku końcowym w wyniku zwracania wartości przez tę funkcję. ===== Znajdowanie pierwszego artykułu książki ===== Pierwszy kod szablonowy według bazy kodów znajdujemy według następującego źródła: <syntaxhighlight lang="lua"> ---- Według bazy kodów, to reprezentuje, to wyrażenie regularne, dowolny kod bazy modułu: Szablonowe; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- Wyrażenie regularne wyszukiwania, względem warunków przechwytywania: ---- lista_szablon, ---- odstepy_poczatku_rozdzialu, ---- przerwa_szablon, ---- obiekt_szablon, ---- kod_szablon, ---- dalszy_tekst; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; ---- Uruchomienie nieskończonej pętli wyszukiwania, która wewnętrznie zostanie zakończona; while(true)do ---- szukanie elementów, według wyrażenia regularnego powyższego, tzn. początku i końca jego wyszukiwania, powyższych elementów przechwyconych przez tę funkcję; local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); </syntaxhighlight> Głównym wzorem wyszukiwania jest: {{OpisParametrów | 1 = {{Code|szablon_normy_kodowania_szablonu}} {{Patrz|szablon_normy_kodowania_szablonu}} | _1 = Główny wzór wyszukiwania kodów bazy kodowania tekstu, który jest potrzebny do konstrukcji większych wzorów bardziej specjalistycznych, w tym przypadku poszczególnych linii: <syntaxhighlight lang="lua"> local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); </syntaxhighlight> }} Szukamy kolejne linie, używając funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, mając wyrażenie regularne powyższe, szukamy, co najmniej pozycji list, a co najwyżej rozdziałów dodatnich, lub nawet zwykłej linii, oczywiście z jakimś kodem. Szukane elementy, numerując je odpowiednio, to są: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{Patrz|liczba_start_szablon}} | _1 = Początek linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 2 = {{Code|liczba_koniec_szablon}} {{Patrz|liczba_koniec_szablon}} | _2 = Koniec linii wyszukanej z obietem kodu kodowania, w tymm również elementu z linkiem, jeżeli tak jakąś istnieje. | 3 = {{Code|lista_szablon}} {{Patrz|lista_szablon}} | _3 = Odpowiednie tą są znaki pozycji listy, lub nie ma ich wcale. Te znaki pozycji listy są: {{Code|<nowiki>[%*:#;<>]*</nowiki>}}. Może być ich liczba zero lub więcej. | 4 = {{Code|odstepy_poczatku_rozdzialu}} {{Patrz|odstepy_poczatku_rozdzialu}} | _4 = Jest to ciąg odstępów {{Code|<nowiki>[^%S]*</nowiki>}} (czyli inaczej: {{Code|<nowiki>%s*</nowiki>}}) bez znaku nowej linii {{Code|\n}}. | 5 = {{Code|przerwa_szablon}} {{Patrz|przerwa_szablon}} | _5 = Elementy te i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, gdzie mogą znajdować się tam elementy rozdziału dodatniego przy pustych wykrytych łańcuchach: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, to tam również mogą znajdować się znaki, typu: {{Code|<}} lub {{Code|>}}, oprócz tego. | 6 = {{Code|obiekt_szablon}} {{Patrz|obiekt_szablon}} | _6 = Jest to typ obiektu, który znajdujemy w kodzie, akceptowalne rodzaje, to {{ZobaczTeż|akceptowalne kody}}: {{Code|LINKW}} - linki wewnętrzne, {{Code|LINKZ}} - linki zewnętrzne, i {{Code|SZABLON}} - kody szablonowe, w tym linki inteligentne i inne linki, a nieakceptowalnymi kodami są to różnego rodzaju nagłówki wraz z istniejącymi zawartościami, ale też {{Code|SZABLON}} - inne niż te linki, a może {{Code|ZNACZNIK}}. | 7 = {{Code|kod_szablon}} {{Patrz|kod_szablon}} | _7 = Numer kodu o typie: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, który może być przetłumaczony na liczbę w wyniku transformacji przez funkcję: {{LzLua|tonumber}}, zamieniającą łańcuch znakowy na liczbę naturalną dodatnią. | 8 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _8 = Jest to dalszy kod, za pierwszym takim zauważalnym kodzie bazy kodów tekstu. }} ====== Wyszukiwanie kolejnych możliwości linii z kodami szablonowymi bazy kodów, znając powyższe zmienne ====== Przy możliwych akceptowalnych kodach typu: {{LinkZobaczTeż|akceptowalne kody}}, będziemy znajdować kolejne możliwości: * Pozycje akceptowalne przez funkcje listy: ** Pozycje dowolnej listy przy niepustym łańcuchu znakowym: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i pustym: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, co oznacza jego znaki, czyli to, że za nim bezpośrednio znajduje się kod bazy kodowania, np. linku, ale akceptowalnego elementu, ** Pozycje listy, gdzie: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, nie zaczyna się od dwukropka {{Code|:}}, ** Dowolna lista dwukropkowa, czyli: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, zaczyna się na dwukropek, a: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, to mogą znaki jeden z: {{Code|<}} i {{Code|>}}, * Początkowe znaki linii dalszego tekstu: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, tzn: nie jest: {{Code|>}}, gdy: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, są puste, * Dowolny rozdział równaniowy dodatni, gdy zmienne: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, i {{Code|odstepy_poczatku_rozdzialu}} {{LinkPatrz|odstepy_poczatku_rozdzialu}}, są puste, a {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}, zaczyna się od równa się, a: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kończy się też na to. ; Gdy nie znaleziono elementów według powyższych punktów, tzn. szukamy według{{dk}} * Gdy linii nie można było przydzielić, do któryś z powyższych punktów, to badamy, czy: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, i {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} - przetłumaczony na numer, czy w nim ewentualnie da się znaleźć kody lnków, jeżeli one są szablonami, czy znacznikami, centrowania, lub sztucznymi nagłówkami, a nawet nagłówkami znacznikowymi, * Szukamy w ich zawartości elementów, i tzn. bezpośrednio zmiennych kodowych linków {{ZobaczTeż|inne_kody}}: {{Code|szablon}} {{Patrz|szablon}}, {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}, {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, przy pomocy funkcji: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca dane jako: <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> {{OpisParametrów | 1 = {{Code|szablon}} {{LinkPatrz|szablon}} | _1 = Wnętrze kodu w bazie kodów tekstu zakodowanego. | 2 = {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}} | _2 = Typ obiektu zakodowanego kodu. | 3 = {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}} | _3 = Numer danego typu obiektu, ale w postaci ciągów znakowych, a nie liczby. | 4 = {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}} | _4 = Dalszy wyszukany tekst po wykrytym linku w jakieś postaci, w jakimś większym kodzie. }} Co uzyskujemy z tych danych początkowych rozważania danego kodu: <syntaxhighlight lang="lua"> local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; </syntaxhighlight> Wytłumaczenie: {{OpisParametrów | 1 = {{Code|obiekt}} {{Patrz|obiekt}} | _1 = Obiekt pochodzący od zmiennej: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}. | 2 = {{Code|kod}} {{Patrz|kod}} | _2 = Wersja przetransformowana od liczby z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}. }} * W ten sposób znaleźliśmy inne kody i dalszy jego tekst w postaci elementów podanych w: {{LinkZobaczTeż|inne_kody}}. Jeśli zmienna zawartości wnętrza kodu: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje wtedy, to znaleźliśmy punkt, który należy rozważyć, a nie pętlować dalej, a ż do zakończenia zasobu danych, przy kolejnych wyszukiwaniach. ===== Gdy znaleziono taki link zwykły, wewnętrzny lub zewnętrzny, albo szablonowy inteligentny, bądź spisowy ===== ; Nadawanie zmiennym wartości{{dk}} Nadawane są wartości dwom zmiennym w postaci kodu zawartego: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec}} {{Patrz|liczba_obiekt_koniec}} | _1 = Tej zamiennej jest madawana wartość z: {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}}: <syntaxhighlight lang="lua"> liczba_obiekt_koniec=liczba_koniec_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie od razu po znalezieniu oobiektu z linią dla danego kodu. | 2 = {{Code|liczba_obiekt_start}} {{Patrz|liczba_obiekt_start}} | _2 = Tej zamiennej jest madawana wartość z: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}: <syntaxhighlight lang="lua"> local liczba_obiekt_start=liczba_start_szablon; </syntaxhighlight> * Tej zmiennej nadajemy wartość w punkcie po znalezieniu oobiektu z linią dla danego kodu, ale jeszczze bardziej po stwierdzeniu, że nim jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}. }} ; Badanie tam zwartych linków{{dk}} Po dojściu do instrukcji warunkowej,jeżeli znaleziono w kodzie w pewien sposób link: {{Code|LINKW}}, {{Code|LINKZ}} lub {{Code|SZABLON}} (inteligentny lub spisowy, ale szablonowy) Gdy znaleziono taki link do artykułu: {{Code|LINKW}}, czy zewnętrzny: {{Code|LINKZ}}, a nawet inteligentny, bądź spisowy, ale szablonowy: {{Code|SZABLON}}, to funkcja sprawdza, jakie go typu linkiem on jest, robi to za pomocą funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja zwraca parametry: <syntaxhighlight lang="lua"> local tak,czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; </syntaxhighlight> Opis tych elementów wyjściowych: {{OpisParametrów | 1 = {{Code|tak}} | _1 = Czy znaleziono taki link szukany w funkcji wydzielania właściwego spisu treści, lub przyjmuje wartość odpowiadającą fałszywej. | 2 = {{Code|czy_element_spisu}} | _2 = Czy to jest artykuł, czy strona w spisie treści, uważaną za niegłówną. | 3 = {{Code|numer_rodzaju_artykulu}} | _3 = Numer typu artykułu linku spisu. | 4 = {{Code|czy_podrecznik}} | _4 = Czy to jest artykuł podręcznika ksiązki, o właściwej nazwie. | 5 = {{Code|czy_okladka}} | _5 = Czy to jest strona artykularna, ale nie artykuł, dozwolony (okładkowy nawet) książki (woluminu). }} Funkcja ta robi to przy pomocy obiektu {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, do sprawdzania, czy to jest artykułem linkiem dopuszczalnym książki, a jeżeli on nie jest linkiem, to jest sprawdzane: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, czy w nim jednak to się znajduje, a jeśli już tu tak, to zwracany jest wynik z pierwszym parametrem prawdziwym, z dalszymi zmiennymi dotyczących stron, a jeśli nie znalazł tu tego, to tylko zrzuca pierwszy parametr odpowiadający wartości fałszywej. ; Policzone zmienne w tym punkcie przez funkcję na podstawie parametrów linkowych{{dk}} {{OpisParametrów | 1 = Funkcja liczy zmienną: {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}}, mówiącą, jaki jest pierwszy rozdziałowy artykuł, to może być artykuł linku wewnętrznego, ale też zewnętrznego. A właściwe i jest to jego pozycja początkowa, nie końcowa. | komórka1 = tak | 2 = Generowana jest również zmienna: {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} - pierwsza początkowa pozycja artykułu niebędącą artykułem okładką lub stroną niedozwolona. | komórka2 = tak | 3 = Obliczana jest pozycja końcowa artykułu dozwolonego: {{Code|liczba_nie_okladka_artykul_koniec}} {{Patrz|liczba_nie_okladka_artykul_koniec}}. | komórka3 = tak }} W powyższych przypadkach, gdy nie znaleziono takiego artykułu, jako pierwszą taką pozycję, to te one przyjmują wartość nilową (nienadaną). ===== Obsługa linków nieokładkowych (dozwolonych) artykułów książki ===== Funkcja wchodzi do instrukcji warunkowej sprawdzającą jaki jest początek właściwego spisu treści, który jeśli owy znajdzie, to pętla szukania tego zostanie przerwana, oto ona: <syntaxhighlight lang="lua"> if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then </syntaxhighlight> W przeciwnym wypadku jest pętla nieprzerywana, chyba, że skończą się dane, a ta {{ZobaczTeż|liczba_obiekt_koniec_poprz}} instrukcja: <syntaxhighlight lang="lua"> liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; </syntaxhighlight> Opis parametru: {{OpisParametrów | 1 = {{Code|liczba_obiekt_koniec_poprz}} {{Patrz|liczba_obiekt_koniec_poprz}} | _1 = Jest to poprzednia ostatnia pozycja artykułu z przestrzeni książkowej projektu polskiego {{NS|l=tak|w=tak|pk=d}}. }} ====== Znajdowanie i nadawanie wartości, pewnym zmiennym,jako wartości początkowe liczenia pozycji początkowej (startowej) ====== Na samym początku są wyznaczane lub inicjowane zmienne: ; Liczone zmienne{{dk}} {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _1 = Początek, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}. | 2 = {{Code|liczba_obiekt_koniec_nowe}} {{Patrz|liczba_obiekt_koniec_nowe}} | _2 = Koniec, pozycja znakowa w tekście artykułu spisu, nieokładkowego artykułu: <syntaxhighlight lang="lua"> local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; </syntaxhighlight> Jeśli nie ma zmiennej: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul}}, to ustalamy ją ten parametr w ramce za pomocą: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_koniec}}. | 3 = {{Code|liczba_obiekt_start_nowe_temp}} {{Patrz|liczba_obiekt_start_nowe_temp}} | _3 = Jest to stara pozycja: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}. | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> local czy_ten_rozdzial=true; </syntaxhighlight> | 5 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}}| _5 = Zmienna pomocnicza: <syntaxhighlight lang="lua"> czy_bez_naglowka=nil; </syntaxhighlight> }} ====== Znajdowanie nagłówków spisu treści dla danego artykułu podręcznika ====== Znajdujemy nagłówek spisu treści w spisie artykułu, typu: '''Spis treści''', czy: '''SPIS RZECZY''', i na podstawie tego pewne zmienne przy pomocy: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, wyszukujący różnego rodzaju nagłówki dodatnie, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, dzięki podfunkcji jej pomocniczej: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, która sprawdza, czy napis wprowadzenia tekstu jest nagłówkiem spisu treści różnie znormowanym i napisanym. Funkcja generuje zmienne: <syntaxhighlight lang="lua"> local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start; </syntaxhighlight> Wytłumaczenie zmiennych: {{OpisParametrów | 1 = {{Code|liczba_spis_tresci_start}} {{Patrz|liczba_spis_tresci_start}} | _1 = Pozycja początkowa napisu wprowadzenia tekstu rozdziału dodatniego. | 2 = {{Code|liczba_spis_tresci_koniec}} {{Patrz|liczba_spis_tresci_koniec}} | _2 = Jak powyżej, tylko, że końcowa. | 3 = {{Code|spis_naglowka_dodatni_start}} {{Patrz|spis_naglowka_dodatni_start}} | _3 = Nagłówek po policzeniu. | 4 = {{Code|spis_naglowka_dodatni_stare_start}} {{Patrz|spis_naglowka_dodatni_stare_start}} | _4 = To samo, co powyżej, ale przed wyznaczeniem. | 5 = {{Code|poziom_naglowka_start}} {{Patrz|poziom_naglowka_start}} | _5 = Poziom nagłówka dodatniego, może być o wartości {{Code|nil}}. }} ====== Wyszukiwanie rozdziałów niespisowych przed artykułem lub nagłówkiem spisu treści ====== Wyszukujemy rozdział następny spełniający pewne warunki nad napisem wprowadzenia tekstu nagłówka spisu treści, za pomocą: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. A jeżeli taki spis treści nie istnieje, to nad artykułem ostatnim wyszukanym w kolejnym obiegu pętli. Jej zwracane parametry to: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Te parametry sa Opis parametrów, ten nagłówek nie musi być dodatni, może być ujemny, czy zerowy, tzn.: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}} {{ZobaczTeż|p.SzukanieKolejnychSekcji}}: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} {{Patrz|liczba_start_naglowek}} | _1 = Znak początku wyszukania nagłówka nie spisu treści. | 2 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _2 = Znak końca wyszukania tego powyżej. | 3 = {{Code|poziom_naglowka}} {{Patrz|poziom_naglowka}} | _3 = Poziom tego nagłówka. }} ; Przed uruchomieniem tej funkcji wyszukiwania wielu nagłówków{{dk}} Wtedy są zbierane są dane w tabeli {{Patrz|tab_zmienne}}: <syntaxhighlight lang="lua"> local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; </syntaxhighlight> A także są inicjowane zmienne: <syntaxhighlight lang="lua"> local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; </syntaxhighlight> Opis zmiennych inicjowanych: {{OpisParametrów | 1 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _1 = Mówi, czy zmienne w tabeli: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, mają być zerowane do wartości nilowej, tzn. {{Code|nil}}, jeśli zajdzie taka potrzeba. | 2 = {{Code|liczba_obiekt_start_nowe}} | _2 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, tylko zaktualizowana o nagłówek istniejący spisu treści, a jeśli go nie ma, to według kodu przyjmuje wartość poprzednią. }} ; Po uruchomieniu tej funkcji znajdowania wielu nagłówków{{dk}} Na podstawie parametrów: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}} inicjowane są wtedy zmienne: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, według kodu (podobnie jak w tym linku referencji odnośnika): <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> ====== Powtórzenie wyszukiwania w przypadku jego nieprawidłowego znalezienia tych rozdziałów ====== ; Nadawanie zmiennym wartości ze strony innych{{dk}} Gdy zmienna: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, przyjmuje wartość odpowiadającą fałszywej, wtedy wchodzimy do instrukcji warunkowej, a następnie dalej do innej przy sprawdzeniu, czy: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, jest nierówne tej: {{Code|liczba_obiekt_start_nowe_temp}} {{LinkPatrz|liczba_obiekt_start_nowe_temp}}, a jeśli tak to wchodzimy do instrukcji warunkowej, która to poprzednia, jak i ta, nie ma instrukcji: '''else'''. Po wejściu do instrukcji warunkowej inicjujemy pewne zmienne innymi: {{OpisParametrów | 1 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} | _1 = Nadawanie wartości końca wyszukiwania od tyłu: <syntaxhighlight lang="lua"> liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; </syntaxhighlight> | 2 = {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}} | _2 = Nadawanie wartości początku wyszukiwania przy liczeniu funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> liczba_obiekt_start_nowe=liczba_obiekt_start; </syntaxhighlight> | 3 = {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}} | _3 = Nadawanie wartości, czy ma zerować zmienne w funkcji zwracanej przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. <syntaxhighlight lang="lua"> czy_ten_rozdzial=true; </syntaxhighlight> Tą zmienną inicjujemy podzmienną tabelowa: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}, przy pomocy: {{Code|czy_ten_rozdzial}} {{LinkPatrz|czy_ten_rozdzial}}, według: <syntaxhighlight lang="lua"> tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; </syntaxhighlight> }} ; Nadawanie zmiennych rozdziałowych ze strony jednej tylko funkcji wyszukujących wiele rozdziałów w jednej funkcji przy wykorzystywaniu innych{{dk}} Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieKolejnychSekcji|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wyszukujące obiekty od: {{Code|liczba_obiekt_start}} {{LinkPatrz|liczba_obiekt_start}}, do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, sprawdzając tekst pomiędzy od: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, do najbliższego wyszukanego rozdziału, czy jest prawidłowy, to jest sprawdzane dzięki: {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. Ta funkcja nadaje wartość zmiennym: {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}. ; Końcowe obliczenia inicjujące podobne zmienne lokalne z tabeli{{dk}} {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}{{dk}} Nadajemy wartości normalnym zmiennym o pewnej nazwie od wartości z tabeli o nazwach o takich samych kluczach, tzn. na podstawie: <syntaxhighlight lang="lua"> liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; </syntaxhighlight> Te zmienne mają jakieś sensowne wartości, jeśli pod warunkiem, nie zostały one wyzerowane lub nie mogły nastąpić takie operacje ze względu na wartość zmiennej: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}. ====== Wybieranie pomiędzy znalezionym rozdziałem, a spisem treści ====== Na podstawie wartości: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, oraz zmiennych poziomu: {{Code|poziom_naglowka_start}} {{LinkPatrz|poziom_naglowka_start}}, i {{Code|poziom_naglowka}} {{LinkPatrz|poziom_naglowka}}, jest wybierana w ten sposób zmienna: {{Code|liczba_spis_tresci_start}} {{LinkPatrz|liczba_spis_tresci_start}}, lub {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}. Najpierw pierwszeństwo ma ta pierwsza, a później ta druga, jeśli by wybrano tą nilową zmienną pierwszą. ====== Sprawdzanie aktualnej pozycji linkowej ====== ; Sprawdzanie warunku, spełnienie jego pozytywne, a jak jest w przypadku przeciwnym{{dk}} * W przypadku przeciwnym instrukcji tej warunkowej, którą jest: <syntaxhighlight lang="lua"> if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then </syntaxhighlight> Nadawane są wartości zmiennych: dla: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, ze strony od: {{Code|liczba_obiekt_koniec_nowe}} {{LinkPatrz|liczba_obiekt_koniec_nowe}}, a parametrowi: {{Code|liczba_nie_okladka_artykul_koniec}} {{LinkPatrz|liczba_nie_okladka_artykul_koniec}}, usuwana jest natomiast wszelaka wartość. A później jest nadawana wartość zmiennej: {{Code|liczba_obiekt_koniec_poprz}} {{LinkPatrz|liczba_obiekt_koniec_poprz}}, poprzez instrukcję: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}}. * W przypadku spełnienia tego warunku w poleceniu warunkowym, robimy na samym końcu obiegu pętli: {{LinkZobaczTeż|liczba_obiekt_koniec_poprz}},jeśli pętla wcześniej nie została przerwana przy pomocy prawdziwej zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, a przedtem inne instrukcje, takie: ; Nadawanie wartości pewnym zmiennym{{dk}} Wtedy nadajemy zmiennej: {{Code|czy_bez_naglowka}} {{LinkPatrz|czy_bez_naglowka}}, wartość według: <syntaxhighlight lang="lua"> czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; </syntaxhighlight> Dalej wykonujemy instrukcje opisane w następnych podrozdziałach średnikowych, jako: ; Instrukcja{{dk}} {{nobold|wtedy}}, i w innym przypadku{{dk}} {{nobold|przeciwnie}}{{dk}} * Rozkaz w rozgałezieniu instrukcji warunkowej: {{Tt|wtedy}}: Sprawdzamy nad punktem: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, sprawdza, czy jakiś powyżej najbliższy obiekt jest: {{Code|LINKW}}, {{Code|LINKZ}} i {{Code|SZABLON}}, linki inteligentny, czy spisowy, ale szablonowy, wtedy działa funkcja: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, wtedy druga zwracana zmienna jest {{Code|true}}, przeciwnie ona zwraca {{Code|false}} z pierwszą początkową wartością wyszukiwania. Wtedy jest zwracana zmienna: {{OpisParametrów | 1 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _1 = Wartość zwracana pozycji z ostatniej funkcji. | 2 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _2 = Czy powyżej tego punktu znakowego są linki. }} Dalej od tego samego punktu, jest liczony rozdział dodatni: {{LinkZobaczTeż|typy rozdziałów|StronicowyParser/Rozdziały}}, z funkcji: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, która zwraca zmienną: {{Code|liczba_start_naglowek_przed}} {{Patrz| liczba_start_naglowek_przed}}. Dalej jest wyznaczany argument: {{Code|liczba_przed}} {{Patrz|liczba_przed}}, sposobem: <syntaxhighlight lang="lua"> local liczba_przed=((liczba_start_naglowek_przed)and((liczba_przed_rozdzialem>=liczba_start_naglowek_przed)and liczba_przed_rozdzialem or liczba_start_naglowek_przed) or liczba_przed_rozdzialem); </syntaxhighlight> Po tym jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, która liczy,czy przed tym znajduje się rozdział zerowy, jak nie, to czy nie ma linku żadnego, a jak nie, to czy przed tym jest rozdział cudzysłowowy, wartością zwracaną jest: {{Code|liczba_start}} {{Patrz|liczba_start}} - pozycja początkowa pozycji prawdopodobnej spisu właściwego, i {{Code|czy_break}} {{Patrz|czy_break}} - czy pętla ma być przerwana. * Przeciwnie: {{Tt|przeciwnie}}: Wywołujemy funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, z pewną anonimową funkcją: <syntaxhighlight lang="lua"> function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) ... end; </syntaxhighlight> Ta funkcja jest wstawiana miejsce wywołania funkcji: {{Code|p.AnalizowanieSekcjowe}} {{LinkŚródtytuł|p.AnalizowanieSekcjowe|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, aby sprawdzić, czy pomiędzy z tymi elementami jest niepoprawny ciąg tekstowy, czyli taki jaki tam nie powinien się pojawić, a jeśli jednak się pojawił, to ta funkcja ma obsługę tego, i w zależności od tego może zwrócić odpowiednie elementy, w tym przypadku prawdziwości zwróconych wartości przez procedurę anonimową, wtedy ta funkcja zwraca wartość {{Code|false}}, przeciwnie ona zwróci poprawne dane, w postaci pewnych zmiennych. Która jest uruchamiana dla parametrów pomiędzy: {{Code|liczba_koniec_naglowek_nowe}} {{Patrz|liczba_koniec_naglowek_nowe}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, dla którego liczymy ciąg za pierwszym takim puntem i przed drugim również takim, z którego usuwamy zmienne szablonowe: {{Code|SZABLON}}, i sprawdzamy, czy otrzymamy ciąg z samych znaków odstępów, a jeżeli ona nie jest, to otrzymamy wartość z tej funkcji {{Code|true}}, przeciwnie: {{Code|nil}}. Z tej funkcji otrzymujemy parametry wytłumaczone w punkcie {{LinkZobaczTeż|p.SzukanieKolejnychSekcji}}: <syntaxhighlight lang="lua"> local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> Jeżeli taka zmienna: {{Code|liczba_start_naglowek}} {{LinkPatrz|liczba_start_naglowek}}, rzeczywiście istnieje, wtedy zmiennej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, z tej istniejącej zmiennej. Dalej wywołujemy funkcję: {{LinkŚródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}, szukając elementów, od tyłu, pomiędzy: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, a {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. Następnym punktem jest wyznaczenie zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, w celu wyznaczenia prawdopodobnego początku liczenia właściwego spisu treści i zmiennej: {{Code|czy_break}} {{LinkPatrz|czy_break}}, czy przerwać pętle nadrzędną, tą funkcją wyznaczania tych parametrów jest: {{LinkŚródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}. ; Kiedy pętla nadrzędna jest przerywana{{dk}} Jeśli zmienna w tych dwóch rozgałęzieniach pętli: '''wtedy''', i '''else''', wartość: {{Code|czy_break}} {{LinkPatrz|czy_break}}, przyjmuje wartość fałszywą, wtedy następuje kolejny obieg pętli, przeciwnie jest przerywana, a {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, jest początkową pozycją właściwego spisu treści z zakodowanego artykułu, tym razem na pewno. ====== Zebrane dane o początku ustalenia właściwego spisu ====== Jeśli w pętli zakończyły się dane, lub nie otrzymano żadnej zmiennej: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, z konkretną wartością, to funkcja zwraca ciąg pusty, czyli właściwy spis treści jest równy ciągowi pustemu. A jeśli mamy jakieś treściwe dane tej zmiennej, to jest to początek znakowy w zmiennej: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, tego właściwego spisu w spisie. ==== Punkt końcowy ==== Punktem początkowym wyszukiwania od tyłu jest punkt równy końcowi tekstu artykułu spisu treści, tzn.: <syntaxhighlight lang="lua"> local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; </syntaxhighlight> Parametry początku wyszukiwania od tyłu: {{OpisParametrów | 1 = {{Code|liczba_obiekt_start_od_tylu}} {{Patrz|liczba_obiekt_start_od_tylu}} | _1 = Punkt początkowy wyszukiwania od tyłu w tekście, artykułu spisu, tzn.: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. }} Wyszukujemy tekst według pewnego wzoru, na podstawie funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. Tym wzorem w tym wywołaniu funkcji jest: <syntaxhighlight lang="lua"> local liczba_start_szablon,liczba_koniec_szablon,linia,lista_szablon,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"(([%*:#;<>]?)([^\n]-)"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_obiekt_start_od_tylu,liczba_start,true); </syntaxhighlight> Ogólnym wzorem, którym jest powyżej, to: {{Code|szablon_normy_kodowania_szablonu}} {{LinkPatrz|szablon_normy_kodowania_szablonu}}. Tą funkcję wywołuje się w {{ZobaczTeż|koniec wyszukiwania-pętla}} pętli, aż do zakończenia danych wyszukiwania lub przerwania, przy wykryciu pewnego punktu końca właściwego spisu treści. Zmienne te wyszukiwania są opisane, i znaczą praktycznie to samo, co w wyszukiwaniu punktu początkowego, tzn.: {{OpisParametrów | 1 = {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}} | _1 = Punkt znalezienia początki ciągu według wzoru, ale od tyłu. | 2 = {{Code|liczba_koniec_szablon}} {{LinkPatrz|liczba_koniec_szablon}} | _2 = To samo, co powyżej, tylko że końca. | 3 = {{Code|linia}} {{Patrz|linia}} | _3 = Linia cała wyszukiwana, bez znaków nowej linii, tzn. na jej początku i końcu. | 4 = {{Code|lista_szablon}} | _4 = Jak w: {{LinkPatrz|lista_szablon}}. | 5 = {{Code|przerwa_szablon}} | _5 = jak w: {{LinkPatrz|przerwa_szablon}}. | 6 = {{Code|obiekt_szablon}} | _6 = Jak w: {{LinkPatrz|obiekt_szablon}}. | 7 = {{Code|kod_szablon}} | _7 = Jak w: {{LinkPatrz|kod_szablon}}. | 8 = {{Code|dalszy_tekst}} | _8 = Jak w: {{LinkPatrz|dalszy_tekst}}. }} ===== Punkty wyszukiwania końca spisu właściwego ze spisu treści podręcznika ===== Dalszymi instrukcjami pętli {{LinkZobaczTeż|koniec wyszukiwania-pętla}}, jest sprawdzenie, czy zmienna: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, istnieje, a jeśli nie, to ta pętla jest przerywana jako zakończenie danych wyszukiwania z punktu do punktu znakowego od tyłu w pewnym większym określonym przedziale. Ustalamy następny punkt wyszukiwania od tyłu równy: {{Code|liczba_obiekt_start_od_tylu}} {{LinkPatrz|liczba_obiekt_start_od_tylu}}, od wartości zmiennej: {{Code|liczba_start_szablon}} {{LinkPatrz|liczba_start_szablon}}, dokładnie według kodu: <syntaxhighlight lang="lua"> liczba_obiekt_start_od_tylu=liczba_start_szablon; </syntaxhighlight> ; Znajdowanie punktów znakowych od tyłu, bez pętlowania dalej, o ile to jest możliwe, jeśli te linie zawierają obiekty typu{{dk}} {{nobold|{{Code|LINKW}}}}, {{nobold|{{Code|LINKZ}}}} lub {{nobold|{{Code|SZABLON}}}} (linki inteligentne, czy spisowe, szablonowe){{dk}} Funkcja możliwe może przerwać pętlowanie, o ile jest to możeliwe, jeśli jest spełniony, któreś z warunków: * Na początku są znaki pozycji listy ze znaków: {{Code|<nowiki>[%*:#;<>]</nowiki>}}. * Jeśli ciąg znakowych tego z: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}} i {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}}. * Jeśli powyższe nie jest spełnione to dla: {{Code|lista_szablon}} {{LinkPatrz|lista_szablon}}, równe ciągowi pustemu, wtedy: ** To ciągi: {{Code|przerwa_szablon}} {{LinkPatrz|przerwa_szablon}} i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, kolejno muszą się zaczynać i kończyć na znaki równa się, czyli: {{Code|{{=}}}}. Jeśli powyższe punkty nie są spełnione, to szukamy pierwszego linku w obiekcie o kodzie dla: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, według znalezionego, jeśli, wzoru: {{LinkŚródtytuł|p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}. Ta funkcja zwraca elementy (wartości - zmienne, zwracane): <syntaxhighlight lang="lua"> szablon,obiekt_szablon,kod_szablon,dalszy_tekst; </syntaxhighlight> Jeśli zmienna: {{Code|szablon}} {{LinkPatrz|szablon}}, istnieje, wtedy znaleziono taki punkt, w którym należy brać pod uwagę, czyli rozważyć. ; Znajdowanie końca spisu właściwego treści{{dk}} {{nobold|{{Code|liczba_start}}}}, który trzeba skorygować{{dk}} Z danych początkowych: {{Code|obiekt}} {{LinkPatrz|obiekt}} (jest to nic innego jak: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt_szablon}}), i {{Code|kod}} {{LinkPatrz|kod}} (uzyskanego z: {{Code|kod_szablon}} {{LinkPatrz|kod_szablon}}), tylko jest to wersja liczbowa, a nie znakowa. Na podstawie tego uzyskujemy, wnętrze kodu z: {{Code|szablon}} {{LinkPatrz|szablon}}, lub z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, uzyskanego z kluczy: {{Code|obiekt}} {{LinkPatrz|obiekt}} i {{Code|kod}} {{LinkPatrz|kod}}. Jeśli jest spełnione, tzn. zależność od punktu początkowego spisu właściwego w zależności od prawdopodobnego punktu końcowego, który mamy ustalić: <syntaxhighlight lang="lua"> if(liczba_start<=liczba_obiekt_start)then </syntaxhighlight> A jeśli jest spełniona ta instrukcja warunkowa, wtedy jest wywoływana funkcja: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie|StronicowyParser/AnalizaSpisuRzeczy/Tom V}}.ona sprawdza, czy parametry: {{Code|obiekt}} {{LinkPatrz|obiekt}}, i {{Code|kod}} {{LinkPatrz|kod}}, czy są kodami linków, a jeśli nie, to czy w: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są linki, a jeśli je tam znalazł, to funkcja zwraca {{ZobaczTeż|kiedy linki}} wartość prawdziwą. Kiedy jest prawdziwe {{LinkZobaczTeż|kiedy linki}}, wtedy uruchamiamy funkcję: {{LinkŚródtytuł|p.PoliczKoniecZakodowanegoTekstuArtykularnego|StronicowyParser/AnalizaSpisuRzeczy/Tom VI}}, co ona wyszukuje niepustą linie nielistową pod spodem tej linii: {{Code|linia}} {{LinkPatrz|linia}}, pod pozycją wskazywaną w tej zmiennej, co po wywołaniu tej funkcji pętla jest przerywana. Funkcja liczy koniec spisu właściwego: {{Code|liczba_koniec}} {{Patrz|liczba_koniec}}, który trzeba skorygować. ===== Znajdowanie napisów wprowadzenia testu wraz z linkami artykułów ===== ==== Wydzielanie spisu właściwego na podstawie punktu startowego i końcowego właściwego spisu treści z całego artykułu danego spisu książki ==== ===== Znajdowanie szablonu licencji i pierwsza korekcja końca spisu ===== ===== Wydzielanie właściwego spisu treści z artykułu zawartości spisu ===== ====== Redagowania testu zawartości spisu o nazwie: {{Tt|Bibliografia}} i {{Tt|Literatura}} - zmienianie i usuwanie szablonów i pewnych linków ====== ==== Co uzyskaliśmy w wyniku działania funkcji wydzielania konkretnego spisu treści z całego artykułu spisu ==== {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> i0cd6207ho8bbirs75mqr5b3nc98yop Szablon:OpisParametrów 10 64146 559646 559491 2026-10-20T00:56:28Z Persino 2851 559646 wikitext text/x-wiki <includeonly><templatestyles src="Szablon:OpisParametrów/styles.css" /> {{#invoke:Ramka|Rozwiń|{{((}}GridTabela{{!}}pozycja{{=}}brak{{!}}klasa op{{=}}OpisParametrów-grid-op{{!}}klasa{{=}}gridtable OpisParametrów-grid {{(((}}klasa{{!}}{{)))}}{{!}}styl{{=}}{{(((}}styl{{!}}{{)))}} {{!}} liczba kolumn {{=}} 3 {{!}} liczba wierszy {{=}} {{#expr:{{#invoke:Ramka|Powtarzaj|nie rozwiń=|1+}}+0}} {{!}} nagłówek 1 {{=}} Lp. {{!}} nagłówek 2 {{=}} Parametr {{!}} klasa 2 {{=}} {{(((}}klasa parametru{{!}}{{)))}} {{!}} styl 2 {{=}} {{(((}}styl parametru{{!}}{{)))}} {{!}} nagłówek 3 {{=}} Opis {{!}} klasa 3 {{=}} {{(((}}klasa opisu{{!}}{{)))}} {{!}} styl 3 {{=}} {{(((}}styl opisu{{!}}{{)))}} {{#invoke:Ramka|Powtarzaj|nie rozwiń=|warunkowe=tak|warunkowe ze zmiennymi=tak| {{!}} klasa wiersza {{((}}_{{))}} {{=}} {{(((}}klasa wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} styl wiersza {{((}}_{{))}} {{=}} {{(((}}styl wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} komórka {{((}}_{{))}}_1 {{=}} <div class="numer_porządkowy_parametru">{{((}}_{{))}}</div> {{!}} komórka {{((}}_{{))}}_2 {{=}} <div class="parametry_funkcji"> {{(((}}{{((}}_{{))}}{{)))}}</div> {{!}} klasa {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-komórka{{!}}{{))}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-nagłówek{{!}}{{))}} {{(((}}klasa parametru{{{((}}_{{))}}{{!}}{{)))}} {{!}} styl {{((}}_{{))}}_2 {{=}} {{(((}}styl parametru{{((}}_{{))}}{{!}}{{)))}} {{!}} kolumny {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}2{{!}}1{{))}} {{!}} nagłówek {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}{{!}}tak{{))}} __((__#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}__!____!__ {{((}}!{{))}} komórka {{((}}_{{))}}_3 {{=}} <div class="opis_parametrów_funkcji"> {{((}}((({{))}}_{{((}}_{{))}}{{((}}))){{))}}</div> {{((}}!{{))}} klasa {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}klasa wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} {{((}}!{{))}} styl {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}styl wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} __))__ }}{{))}}}}{{#if:{{{bez dodatkowych sprawdzeń|}}}||{{#invoke:Ramka|Rozwiń|{{((}}#invoke:Sprawdź{{!}}Parametry{{!}}{{=}}problemy-w-szablonie-%s {{((}}(({{))}}Kategoria{{((}}!{{))}}Szablon %s do sprawdzenia{{((}})){{))}}{{!}}klasa{{=}}{{!}}styl{{=}}{{!}}klasa parametru{{=}}{{!}}styl parametru{{=}}{{!}}klasa opisu{{=}}{{!}}styl opisu{{=}}{{#invoke:Ramka|Powtarzaj|po kolei=tak|nie rozwiń=tak|{{!}}{{((}}_{{))}}{{=}}txt!{{!}}styl parametru{{((}}_{{))}}{{=}}{{!}}klasa parametru{{((}}_{{))}}{{=}}{{!}}styl wartości{{((}}_{{))}}{{=}}{{!}}klasa wartości{{((}}_{{))}}{{=}}{{!}}styl wiersza{{((}}_{{))}}{{=}}{{!}}klasa wiersza{{((}}_{{))}}{{=}}{{!}}nagłówek{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};komórka{{((}}_{{))}}{{!}}komórka{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};nagłówek{{((}}_{{))}}{{!}}_{{((}}_{{))}}{{=}}txt?!;nagłówek{{((}}_{{))}};komórka{{((}}_{{))}}}}{{))}} }}}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> rjphpjjyv4ntfi9sibaa5fq410uwkok 559647 559646 2026-10-20T00:59:08Z Persino 2851 559647 wikitext text/x-wiki <includeonly><templatestyles src="Szablon:OpisParametrów/styles.css" /> {{#invoke:Ramka|Rozwiń|{{((}}GridTabela{{!}}pozycja{{=}}brak{{!}}klasa op{{=}}OpisParametrów-grid-op{{!}}klasa{{=}}gridtable OpisParametrów-grid {{(((}}klasa{{!}}{{)))}}{{!}}styl{{=}}{{(((}}styl{{!}}{{)))}} {{!}} liczba kolumn {{=}} 3 {{!}} liczba wierszy {{=}} {{#expr:{{#invoke:Ramka|Powtarzaj|nie rozwiń=|1+}}+0}} {{!}} nagłówek 1 {{=}} Lp. {{!}} nagłówek 2 {{=}} Parametr {{!}} klasa 2 {{=}} {{(((}}klasa parametru{{!}}{{)))}} {{!}} styl 2 {{=}} {{(((}}styl parametru{{!}}{{)))}} {{!}} nagłówek 3 {{=}} Opis {{!}} klasa 3 {{=}} {{(((}}klasa opisu{{!}}{{)))}} {{!}} styl 3 {{=}} {{(((}}styl opisu{{!}}{{)))}} {{#invoke:Ramka|Powtarzaj|nie rozwiń=|warunkowe=tak|warunkowe ze zmiennymi=tak| {{!}} klasa wiersza {{((}}_{{))}} {{=}} {{(((}}klasa wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} styl wiersza {{((}}_{{))}} {{=}} {{(((}}styl wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} komórka {{((}}_{{))}}_1 {{=}} {{Div start|klasa=numer_porządkowy_parametru}}{{((}}_{{))}}{{Div koniec}} {{!}} komórka {{((}}_{{))}}_2 {{=}} {{Div start|klasa=parametry_funkcji}} {{(((}}{{((}}_{{))}}{{)))}}{{Div koniec}} {{!}} klasa {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-komórka{{!}}{{))}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-nagłówek{{!}}{{))}} {{(((}}klasa parametru{{{((}}_{{))}}{{!}}{{)))}} {{!}} styl {{((}}_{{))}}_2 {{=}} {{(((}}styl parametru{{((}}_{{))}}{{!}}{{)))}} {{!}} kolumny {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}2{{!}}1{{))}} {{!}} nagłówek {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}{{!}}tak{{))}} __((__#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}__!____!__ {{((}}!{{))}} komórka {{((}}_{{))}}_3 {{=}} {{Div start|klasa=opis_parametrów_funkcji}} {{((}}((({{))}}_{{((}}_{{))}}{{((}}))){{))}}{{Div koniec}} {{((}}!{{))}} klasa {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}klasa wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} {{((}}!{{))}} styl {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}styl wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} __))__ }}{{))}}}}{{#if:{{{bez dodatkowych sprawdzeń|}}}||{{#invoke:Ramka|Rozwiń|{{((}}#invoke:Sprawdź{{!}}Parametry{{!}}{{=}}problemy-w-szablonie-%s {{((}}(({{))}}Kategoria{{((}}!{{))}}Szablon %s do sprawdzenia{{((}})){{))}}{{!}}klasa{{=}}{{!}}styl{{=}}{{!}}klasa parametru{{=}}{{!}}styl parametru{{=}}{{!}}klasa opisu{{=}}{{!}}styl opisu{{=}}{{#invoke:Ramka|Powtarzaj|po kolei=tak|nie rozwiń=tak|{{!}}{{((}}_{{))}}{{=}}txt!{{!}}styl parametru{{((}}_{{))}}{{=}}{{!}}klasa parametru{{((}}_{{))}}{{=}}{{!}}styl wartości{{((}}_{{))}}{{=}}{{!}}klasa wartości{{((}}_{{))}}{{=}}{{!}}styl wiersza{{((}}_{{))}}{{=}}{{!}}klasa wiersza{{((}}_{{))}}{{=}}{{!}}nagłówek{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};komórka{{((}}_{{))}}{{!}}komórka{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};nagłówek{{((}}_{{))}}{{!}}_{{((}}_{{))}}{{=}}txt?!;nagłówek{{((}}_{{))}};komórka{{((}}_{{))}}}}{{))}} }}}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> gi6vzd4961tl5ozy5x9r982vl6m8o3s 559648 559647 2026-10-20T01:03:19Z Persino 2851 559648 wikitext text/x-wiki <includeonly><templatestyles src="Szablon:OpisParametrów/styles.css" /> {{#invoke:Ramka|Rozwiń|{{((}}GridTabela{{!}}pozycja{{=}}brak{{!}}klasa op{{=}}OpisParametrów-grid-op{{!}}klasa{{=}}gridtable OpisParametrów-grid {{(((}}klasa{{!}}{{)))}}{{!}}styl{{=}}{{(((}}styl{{!}}{{)))}} {{!}} liczba kolumn {{=}} 3 {{!}} liczba wierszy {{=}} {{#expr:{{#invoke:Ramka|Powtarzaj|nie rozwiń=|1+}}+0}} {{!}} nagłówek 1 {{=}} Lp. {{!}} nagłówek 2 {{=}} Parametr {{!}} klasa 2 {{=}} {{(((}}klasa parametru{{!}}{{)))}} {{!}} styl 2 {{=}} {{(((}}styl parametru{{!}}{{)))}} {{!}} nagłówek 3 {{=}} Opis {{!}} klasa 3 {{=}} {{(((}}klasa opisu{{!}}{{)))}} {{!}} styl 3 {{=}} {{(((}}styl opisu{{!}}{{)))}} {{#invoke:Ramka|Powtarzaj|nie rozwiń=|warunkowe=tak|warunkowe ze zmiennymi=tak| {{!}} klasa wiersza {{((}}_{{))}} {{=}} {{(((}}klasa wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} styl wiersza {{((}}_{{))}} {{=}} {{(((}}styl wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} komórka {{((}}_{{))}}_1 {{=}} {{((}}Div start{{!}}klasa{{=}}numer_porządkowy_parametru}}{{((}}_{{))}}{{((}}Div koniec{{))}} {{!}} komórka {{((}}_{{))}}_2 {{=}} {{((}}Div start{{!}}klasa{{=}}parametry_funkcji{{))}} {{(((}}{{((}}_{{))}}{{)))}}{{((}}Div koniec{{))}} {{!}} klasa {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-komórka{{!}}{{))}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-nagłówek{{!}}{{))}} {{(((}}klasa parametru{{{((}}_{{))}}{{!}}{{)))}} {{!}} styl {{((}}_{{))}}_2 {{=}} {{(((}}styl parametru{{((}}_{{))}}{{!}}{{)))}} {{!}} kolumny {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}2{{!}}1{{))}} {{!}} nagłówek {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}{{!}}tak{{))}} __((__#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}__!____!__ {{((}}!{{))}} komórka {{((}}_{{))}}_3 {{=}} {{((}}Div start{{!}}klasa{{=}}opis_parametrów_funkcji{{))}} {{((}}((({{))}}_{{((}}_{{))}}{{((}}))){{))}}{{((}}Div koniec{{))}} {{((}}!{{))}} klasa {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}klasa wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} {{((}}!{{))}} styl {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}styl wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} __))__ }}{{))}}}}{{#if:{{{bez dodatkowych sprawdzeń|}}}||{{#invoke:Ramka|Rozwiń|{{((}}#invoke:Sprawdź{{!}}Parametry{{!}}{{=}}problemy-w-szablonie-%s {{((}}(({{))}}Kategoria{{((}}!{{))}}Szablon %s do sprawdzenia{{((}})){{))}}{{!}}klasa{{=}}{{!}}styl{{=}}{{!}}klasa parametru{{=}}{{!}}styl parametru{{=}}{{!}}klasa opisu{{=}}{{!}}styl opisu{{=}}{{#invoke:Ramka|Powtarzaj|po kolei=tak|nie rozwiń=tak|{{!}}{{((}}_{{))}}{{=}}txt!{{!}}styl parametru{{((}}_{{))}}{{=}}{{!}}klasa parametru{{((}}_{{))}}{{=}}{{!}}styl wartości{{((}}_{{))}}{{=}}{{!}}klasa wartości{{((}}_{{))}}{{=}}{{!}}styl wiersza{{((}}_{{))}}{{=}}{{!}}klasa wiersza{{((}}_{{))}}{{=}}{{!}}nagłówek{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};komórka{{((}}_{{))}}{{!}}komórka{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};nagłówek{{((}}_{{))}}{{!}}_{{((}}_{{))}}{{=}}txt?!;nagłówek{{((}}_{{))}};komórka{{((}}_{{))}}}}{{))}} }}}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> goiahzz11639ytv3zcfcjifs0wh54fd 559649 559648 2026-10-20T01:03:53Z Persino 2851 559649 wikitext text/x-wiki <includeonly><templatestyles src="Szablon:OpisParametrów/styles.css" /> {{#invoke:Ramka|Rozwiń|{{((}}GridTabela{{!}}pozycja{{=}}brak{{!}}klasa op{{=}}OpisParametrów-grid-op{{!}}klasa{{=}}gridtable OpisParametrów-grid {{(((}}klasa{{!}}{{)))}}{{!}}styl{{=}}{{(((}}styl{{!}}{{)))}} {{!}} liczba kolumn {{=}} 3 {{!}} liczba wierszy {{=}} {{#expr:{{#invoke:Ramka|Powtarzaj|nie rozwiń=|1+}}+0}} {{!}} nagłówek 1 {{=}} Lp. {{!}} nagłówek 2 {{=}} Parametr {{!}} klasa 2 {{=}} {{(((}}klasa parametru{{!}}{{)))}} {{!}} styl 2 {{=}} {{(((}}styl parametru{{!}}{{)))}} {{!}} nagłówek 3 {{=}} Opis {{!}} klasa 3 {{=}} {{(((}}klasa opisu{{!}}{{)))}} {{!}} styl 3 {{=}} {{(((}}styl opisu{{!}}{{)))}} {{#invoke:Ramka|Powtarzaj|nie rozwiń=|warunkowe=tak|warunkowe ze zmiennymi=tak| {{!}} klasa wiersza {{((}}_{{))}} {{=}} {{(((}}klasa wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} styl wiersza {{((}}_{{))}} {{=}} {{(((}}styl wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} komórka {{((}}_{{))}}_1 {{=}} {{((}}Div start{{!}}klasa{{=}}numer_porządkowy_parametru{{))}}{{((}}_{{))}}{{((}}Div koniec{{))}} {{!}} komórka {{((}}_{{))}}_2 {{=}} {{((}}Div start{{!}}klasa{{=}}parametry_funkcji{{))}} {{(((}}{{((}}_{{))}}{{)))}}{{((}}Div koniec{{))}} {{!}} klasa {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-komórka{{!}}{{))}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-nagłówek{{!}}{{))}} {{(((}}klasa parametru{{{((}}_{{))}}{{!}}{{)))}} {{!}} styl {{((}}_{{))}}_2 {{=}} {{(((}}styl parametru{{((}}_{{))}}{{!}}{{)))}} {{!}} kolumny {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}2{{!}}1{{))}} {{!}} nagłówek {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}{{!}}tak{{))}} __((__#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}__!____!__ {{((}}!{{))}} komórka {{((}}_{{))}}_3 {{=}} {{((}}Div start{{!}}klasa{{=}}opis_parametrów_funkcji{{))}} {{((}}((({{))}}_{{((}}_{{))}}{{((}}))){{))}}{{((}}Div koniec{{))}} {{((}}!{{))}} klasa {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}klasa wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} {{((}}!{{))}} styl {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}styl wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} __))__ }}{{))}}}}{{#if:{{{bez dodatkowych sprawdzeń|}}}||{{#invoke:Ramka|Rozwiń|{{((}}#invoke:Sprawdź{{!}}Parametry{{!}}{{=}}problemy-w-szablonie-%s {{((}}(({{))}}Kategoria{{((}}!{{))}}Szablon %s do sprawdzenia{{((}})){{))}}{{!}}klasa{{=}}{{!}}styl{{=}}{{!}}klasa parametru{{=}}{{!}}styl parametru{{=}}{{!}}klasa opisu{{=}}{{!}}styl opisu{{=}}{{#invoke:Ramka|Powtarzaj|po kolei=tak|nie rozwiń=tak|{{!}}{{((}}_{{))}}{{=}}txt!{{!}}styl parametru{{((}}_{{))}}{{=}}{{!}}klasa parametru{{((}}_{{))}}{{=}}{{!}}styl wartości{{((}}_{{))}}{{=}}{{!}}klasa wartości{{((}}_{{))}}{{=}}{{!}}styl wiersza{{((}}_{{))}}{{=}}{{!}}klasa wiersza{{((}}_{{))}}{{=}}{{!}}nagłówek{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};komórka{{((}}_{{))}}{{!}}komórka{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};nagłówek{{((}}_{{))}}{{!}}_{{((}}_{{))}}{{=}}txt?!;nagłówek{{((}}_{{))}};komórka{{((}}_{{))}}}}{{))}} }}}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> 5fr2koh2n4myg1j2d54vr7sx2hhwh8r 559650 559649 2026-10-20T01:06:43Z Persino 2851 559650 wikitext text/x-wiki <includeonly><templatestyles src="Szablon:OpisParametrów/styles.css" /> {{#invoke:Ramka|Rozwiń|{{((}}GridTabela{{!}}pozycja{{=}}brak{{!}}klasa op{{=}}OpisParametrów-grid-op{{!}}klasa{{=}}gridtable OpisParametrów-grid {{(((}}klasa{{!}}{{)))}}{{!}}styl{{=}}{{(((}}styl{{!}}{{)))}} {{!}} liczba kolumn {{=}} 3 {{!}} liczba wierszy {{=}} {{#expr:{{#invoke:Ramka|Powtarzaj|nie rozwiń=|1+}}+0}} {{!}} nagłówek 1 {{=}} Lp. {{!}} nagłówek 2 {{=}} Parametr {{!}} klasa 2 {{=}} {{(((}}klasa parametru{{!}}{{)))}} {{!}} styl 2 {{=}} {{(((}}styl parametru{{!}}{{)))}} {{!}} nagłówek 3 {{=}} Opis {{!}} klasa 3 {{=}} {{(((}}klasa opisu{{!}}{{)))}} {{!}} styl 3 {{=}} {{(((}}styl opisu{{!}}{{)))}} {{#invoke:Ramka|Powtarzaj|nie rozwiń=|warunkowe=tak|warunkowe ze zmiennymi=tak| {{!}} klasa wiersza {{((}}_{{))}} {{=}} {{(((}}klasa wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} styl wiersza {{((}}_{{))}} {{=}} {{(((}}styl wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} komórka {{((}}_{{))}}_1 {{=}} {{((}}Div start{{!}}klasa{{=}}numer_porządkowy_parametru{{))}}{{((}}_{{))}}{{((}}Div koniec{{))}} {{!}} komórka {{((}}_{{))}}_2 {{=}} {{((}}Div start{{!}}klasa{{=}}parametry_funkcji {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}parametry-opis{{{))}}{{))}} {{(((}}{{((}}_{{))}}{{)))}}{{((}}Div koniec{{))}} {{!}} klasa {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-komórka{{!}}{{))}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-nagłówek{{!}}{{))}} {{(((}}klasa parametru{{{((}}_{{))}}{{!}}{{)))}} {{!}} styl {{((}}_{{))}}_2 {{=}} {{(((}}styl parametru{{((}}_{{))}}{{!}}{{)))}} {{!}} kolumny {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}2{{!}}1{{))}} {{!}} nagłówek {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}{{!}}tak{{))}} __((__#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}__!____!__ {{((}}!{{))}} komórka {{((}}_{{))}}_3 {{=}} {{((}}Div start{{!}}klasa{{=}}opis_parametrów_funkcji{{))}} {{((}}((({{))}}_{{((}}_{{))}}{{((}}))){{))}}{{((}}Div koniec{{))}} {{((}}!{{))}} klasa {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}klasa wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} {{((}}!{{))}} styl {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}styl wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} __))__ }}{{))}}}}{{#if:{{{bez dodatkowych sprawdzeń|}}}||{{#invoke:Ramka|Rozwiń|{{((}}#invoke:Sprawdź{{!}}Parametry{{!}}{{=}}problemy-w-szablonie-%s {{((}}(({{))}}Kategoria{{((}}!{{))}}Szablon %s do sprawdzenia{{((}})){{))}}{{!}}klasa{{=}}{{!}}styl{{=}}{{!}}klasa parametru{{=}}{{!}}styl parametru{{=}}{{!}}klasa opisu{{=}}{{!}}styl opisu{{=}}{{#invoke:Ramka|Powtarzaj|po kolei=tak|nie rozwiń=tak|{{!}}{{((}}_{{))}}{{=}}txt!{{!}}styl parametru{{((}}_{{))}}{{=}}{{!}}klasa parametru{{((}}_{{))}}{{=}}{{!}}styl wartości{{((}}_{{))}}{{=}}{{!}}klasa wartości{{((}}_{{))}}{{=}}{{!}}styl wiersza{{((}}_{{))}}{{=}}{{!}}klasa wiersza{{((}}_{{))}}{{=}}{{!}}nagłówek{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};komórka{{((}}_{{))}}{{!}}komórka{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};nagłówek{{((}}_{{))}}{{!}}_{{((}}_{{))}}{{=}}txt?!;nagłówek{{((}}_{{))}};komórka{{((}}_{{))}}}}{{))}} }}}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> 71bcu2vyi2yctd1tyyhfv6ehlg4131k 559651 559650 2026-10-20T01:07:30Z Persino 2851 559651 wikitext text/x-wiki <includeonly><templatestyles src="Szablon:OpisParametrów/styles.css" /> {{#invoke:Ramka|Rozwiń|{{((}}GridTabela{{!}}pozycja{{=}}brak{{!}}klasa op{{=}}OpisParametrów-grid-op{{!}}klasa{{=}}gridtable OpisParametrów-grid {{(((}}klasa{{!}}{{)))}}{{!}}styl{{=}}{{(((}}styl{{!}}{{)))}} {{!}} liczba kolumn {{=}} 3 {{!}} liczba wierszy {{=}} {{#expr:{{#invoke:Ramka|Powtarzaj|nie rozwiń=|1+}}+0}} {{!}} nagłówek 1 {{=}} Lp. {{!}} nagłówek 2 {{=}} Parametr {{!}} klasa 2 {{=}} {{(((}}klasa parametru{{!}}{{)))}} {{!}} styl 2 {{=}} {{(((}}styl parametru{{!}}{{)))}} {{!}} nagłówek 3 {{=}} Opis {{!}} klasa 3 {{=}} {{(((}}klasa opisu{{!}}{{)))}} {{!}} styl 3 {{=}} {{(((}}styl opisu{{!}}{{)))}} {{#invoke:Ramka|Powtarzaj|nie rozwiń=|warunkowe=tak|warunkowe ze zmiennymi=tak| {{!}} klasa wiersza {{((}}_{{))}} {{=}} {{(((}}klasa wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} styl wiersza {{((}}_{{))}} {{=}} {{(((}}styl wiersza{{((}}_{{))}}{{!}}{{)))}} {{!}} komórka {{((}}_{{))}}_1 {{=}} {{((}}Div start{{!}}klasa{{=}}numer_porządkowy_parametru{{))}}{{((}}_{{))}}{{((}}Div koniec{{))}} {{!}} komórka {{((}}_{{))}}_2 {{=}} {{((}}Div start{{!}}klasa{{=}}parametry_funkcji {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}parametry-opis{{))}}{{))}} {{(((}}{{((}}_{{))}}{{)))}}{{((}}Div koniec{{))}} {{!}} klasa {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-komórka{{!}}{{))}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{!}}OpisParametrów-nagłówek{{!}}{{))}} {{(((}}klasa parametru{{{((}}_{{))}}{{!}}{{)))}} {{!}} styl {{((}}_{{))}}_2 {{=}} {{(((}}styl parametru{{((}}_{{))}}{{!}}{{)))}} {{!}} kolumny {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}2{{!}}1{{))}} {{!}} nagłówek {{((}}_{{))}}_2 {{=}} {{((}}#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}{{!}}{{!}}tak{{))}} __((__#if:{{(((}}nagłówek{{((}}_{{))}}{{!}}{{)))}}{{(((}}komórka{{((}}_{{))}}{{!}}{{)))}}__!____!__ {{((}}!{{))}} komórka {{((}}_{{))}}_3 {{=}} {{((}}Div start{{!}}klasa{{=}}opis_parametrów_funkcji{{))}} {{((}}((({{))}}_{{((}}_{{))}}{{((}}))){{))}}{{((}}Div koniec{{))}} {{((}}!{{))}} klasa {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}klasa wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} {{((}}!{{))}} styl {{((}}_{{))}}_3 {{=}} {{((}}((({{))}}styl wartości{{((}}_{{))}}{{((}}!{{))}}{{((}}))){{))}} __))__ }}{{))}}}}{{#if:{{{bez dodatkowych sprawdzeń|}}}||{{#invoke:Ramka|Rozwiń|{{((}}#invoke:Sprawdź{{!}}Parametry{{!}}{{=}}problemy-w-szablonie-%s {{((}}(({{))}}Kategoria{{((}}!{{))}}Szablon %s do sprawdzenia{{((}})){{))}}{{!}}klasa{{=}}{{!}}styl{{=}}{{!}}klasa parametru{{=}}{{!}}styl parametru{{=}}{{!}}klasa opisu{{=}}{{!}}styl opisu{{=}}{{#invoke:Ramka|Powtarzaj|po kolei=tak|nie rozwiń=tak|{{!}}{{((}}_{{))}}{{=}}txt!{{!}}styl parametru{{((}}_{{))}}{{=}}{{!}}klasa parametru{{((}}_{{))}}{{=}}{{!}}styl wartości{{((}}_{{))}}{{=}}{{!}}klasa wartości{{((}}_{{))}}{{=}}{{!}}styl wiersza{{((}}_{{))}}{{=}}{{!}}klasa wiersza{{((}}_{{))}}{{=}}{{!}}nagłówek{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};komórka{{((}}_{{))}}{{!}}komórka{{((}}_{{))}}{{=}}txt?;_{{((}}_{{))}};nagłówek{{((}}_{{))}}{{!}}_{{((}}_{{))}}{{=}}txt?!;nagłówek{{((}}_{{))}};komórka{{((}}_{{))}}}}{{))}} }}}}</includeonly><noinclude>{{Dokumentacja}}</noinclude> ns7y2rqoy3cs63qm25nlbuhuqdhzmne Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb 0 64425 559621 559560 2026-10-19T15:50:30Z YxiCode 34510 /* Przedstawianie liczb mieszanych i ułamków dziesiętnych w postaci ułamków zwykłych */ 559621 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). }} === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. lsffaqlocjjfq5frm3jf0hnbqhjrzqu 559622 559621 2026-10-19T15:57:02Z YxiCode 34510 /* Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie */ 559622 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). }} === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. gfk5g4317edmeqrj5p1hczcoga2119k 559624 559622 2026-10-19T16:06:45Z YxiCode 34510 /* Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie */ 559624 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. c13zc5ngqtgit8one8ujestmfc9hfd2 559629 559624 2026-10-19T17:11:33Z YxiCode 34510 559629 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Trzy postacie jednego ułamka === Omówiliśmy już trzy postacie ułamków: * '''ułamki zwykłe''' - forma <math>\frac{a}{b}</math>, * '''liczby mieszane''' - forma <math>a\frac{b}{c}</math>, * '''ułamki dziesiętne''' - np. 0,8; 38,592. Te formy mogą reprezentować tę samą liczbę. Rozważmy np. <math>\frac{9}{5}</math>. Łatwo zauważyć, że <math>\frac{9}{5}=1\frac{4}{5}</math>. Zarazem możemy to wyrazić jako 1,8. Wszystkie te wyniki są równe! Niektóre ułamki nie posiadają liczby mieszanej, bo są na to za małe. Z klasy IV może pamiętasz, że takie ułamki to są '''ułamki właściwe''' (np. <math>\frac{1}{4}=0{,}25</math>) - gdzie licznik jest mniejszy od mianownika. Takie, które możemy przekształcić na liczby mieszane, to '''ułamki niewłaściwe''' (np. nasze <math>\frac{9}{5}</math>), gdzie licznik jest większy od mianownika. === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. === Odwrotność liczby === === Praca z osią liczbową i obliczanie podziałki === === Porównywanie ułamków zwykłych === == Zadania == 36dyyq2ayvkeoufjxldrjpma63akc23 559630 559629 2026-10-19T17:18:48Z YxiCode 34510 /* Liczby przeciwne */ 559630 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Trzy postacie jednego ułamka === Omówiliśmy już trzy postacie ułamków: * '''ułamki zwykłe''' - forma <math>\frac{a}{b}</math>, * '''liczby mieszane''' - forma <math>a\frac{b}{c}</math>, * '''ułamki dziesiętne''' - np. 0,8; 38,592. Te formy mogą reprezentować tę samą liczbę. Rozważmy np. <math>\frac{9}{5}</math>. Łatwo zauważyć, że <math>\frac{9}{5}=1\frac{4}{5}</math>. Zarazem możemy to wyrazić jako 1,8. Wszystkie te wyniki są równe! Niektóre ułamki nie posiadają liczby mieszanej, bo są na to za małe. Z klasy IV może pamiętasz, że takie ułamki to są '''ułamki właściwe''' (np. <math>\frac{1}{4}=0{,}25</math>) - gdzie licznik jest mniejszy od mianownika. Takie, które możemy przekształcić na liczby mieszane, to '''ułamki niewłaściwe''' (np. nasze <math>\frac{9}{5}</math>), gdzie licznik jest większy od mianownika. === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki, ale tę samą wartość. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. === Odwrotność liczby === === Praca z osią liczbową i obliczanie podziałki === === Porównywanie ułamków zwykłych === == Zadania == 4w9086gq7c6r5ux20d75sgzqiggztxe 559633 559630 2026-10-19T17:48:20Z YxiCode 34510 /* Odwrotność liczby */ 559633 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Trzy postacie jednego ułamka === Omówiliśmy już trzy postacie ułamków: * '''ułamki zwykłe''' - forma <math>\frac{a}{b}</math>, * '''liczby mieszane''' - forma <math>a\frac{b}{c}</math>, * '''ułamki dziesiętne''' - np. 0,8; 38,592. Te formy mogą reprezentować tę samą liczbę. Rozważmy np. <math>\frac{9}{5}</math>. Łatwo zauważyć, że <math>\frac{9}{5}=1\frac{4}{5}</math>. Zarazem możemy to wyrazić jako 1,8. Wszystkie te wyniki są równe! Niektóre ułamki nie posiadają liczby mieszanej, bo są na to za małe. Z klasy IV może pamiętasz, że takie ułamki to są '''ułamki właściwe''' (np. <math>\frac{1}{4}=0{,}25</math>) - gdzie licznik jest mniejszy od mianownika. Takie, które możemy przekształcić na liczby mieszane, to '''ułamki niewłaściwe''' (np. nasze <math>\frac{9}{5}</math>), gdzie licznik jest większy od mianownika. === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki, ale tę samą wartość. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. === Odwrotność liczby === Odwrotność liczby nie należy mylić z jej przeciwieństwem, choć brzmią podobnie. {{Mat:Def |Odwrotność liczby <math>a</math> jest to <math>\frac{1}{a}</math>. }} Krótka i przyjemna definicja - choć zdradliwa. Bowiem co zrobić w przypadku <math>\frac{3}{5}</math>? A <math>1\frac{2}{3}</math>?? A 1,56??? {{Mat:Prz |'''Oblicz odwrotność <math>\frac{2}{3}</math>'''. '''Krok po kroku''' Z definicji odwrotność tej liczby to <math>\frac{1}{\frac{2}{3}}</math> - ale nam to mało mówi. Zastanówmy się więc, jak to rozpisać. Ułamek to jest inny sposób na wyrażenie ilorazu. Zatem możemy zapisać: <math>\frac{1}{\frac{2}{3}}=1:\frac{2}{3}</math> Dzielenie ułamków było w klasie V. Jak pewnie wiesz, zamieniamy miejscami licznik i mianownik - a zamiast dzielenia, mnożymy. <math>1:\frac{2}{3}=1\cdot\frac{3}{2}=\frac{3}{2}</math> Tak oto obliczyliśmy odwrotność. '''Na skróty''' O wiele szybszą metodą jest zamienienie licznika z mianownikiem od razu. To działa dla jakiegokolwiek ułamka zwykłego. <math>\frac{2}{3}\longrightarrow\frac{3}{2}</math> Dlatego nazywamy dzielenie ułamków "mnożeniem przez '''odwrotność'''". }} === Praca z osią liczbową i obliczanie podziałki === === Porównywanie ułamków zwykłych === == Zadania == jx0sx5xsf9lluxg10bp0b9z2bdwetut 559634 559633 2026-10-19T18:58:04Z YxiCode 34510 /* Odwrotność liczby */ 559634 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Trzy postacie jednego ułamka === Omówiliśmy już trzy postacie ułamków: * '''ułamki zwykłe''' - forma <math>\frac{a}{b}</math>, * '''liczby mieszane''' - forma <math>a\frac{b}{c}</math>, * '''ułamki dziesiętne''' - np. 0,8; 38,592. Te formy mogą reprezentować tę samą liczbę. Rozważmy np. <math>\frac{9}{5}</math>. Łatwo zauważyć, że <math>\frac{9}{5}=1\frac{4}{5}</math>. Zarazem możemy to wyrazić jako 1,8. Wszystkie te wyniki są równe! Niektóre ułamki nie posiadają liczby mieszanej, bo są na to za małe. Z klasy IV może pamiętasz, że takie ułamki to są '''ułamki właściwe''' (np. <math>\frac{1}{4}=0{,}25</math>) - gdzie licznik jest mniejszy od mianownika. Takie, które możemy przekształcić na liczby mieszane, to '''ułamki niewłaściwe''' (np. nasze <math>\frac{9}{5}</math>), gdzie licznik jest większy od mianownika. === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki, ale tę samą wartość. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. === Odwrotność liczby === Odwrotność liczby nie należy mylić z jej przeciwieństwem, choć brzmią podobnie. {{Mat:Def |Odwrotność liczby <math>a</math> jest to <math>\frac{1}{a}</math>. }} Krótka i przyjemna definicja - choć zdradliwa. Bowiem co zrobić w przypadku <math>\frac{3}{5}</math>? A <math>1\frac{2}{3}</math>? A 1,56? {{Mat:Prz |'''Oblicz odwrotność <math>\frac{2}{3}</math>'''. '''Krok po kroku''' Z definicji odwrotność tej liczby to <math>\frac{1}{\frac{2}{3}}</math> - ale nam to mało mówi. Zastanówmy się więc, jak to rozpisać. Ułamek to jest inny sposób na wyrażenie ilorazu. Zatem możemy zapisać: <math>\frac{1}{\frac{2}{3}}=1:\frac{2}{3}</math> Dzielenie ułamków było w klasie V. Jak pewnie wiesz, zamieniamy miejscami licznik i mianownik - a zamiast dzielenia, mnożymy. <math>1:\frac{2}{3}=1\cdot\frac{3}{2}=\frac{3}{2}</math> Tak oto obliczyliśmy odwrotność. '''Na skróty''' O wiele szybszą metodą jest zamienienie licznika z mianownikiem od razu. To działa dla jakiegokolwiek ułamka zwykłego. <math>\frac{2}{3}\longrightarrow\frac{3}{2}</math> Dlatego nazywamy dzielenie ułamków "mnożeniem przez '''odwrotność'''". }} {{Mat:Prz |'''Oblicz odwrotność <math>1\frac{4}{5}</math>'''. Wiesz już jak: * [[#Przedstawianie liczb mieszanych w postaci ułamków zwykłych|zamieniać liczbę mieszaną na ułamek niewłaściwy]], * szybko obliczać odwrotność ułamka zwykłego. Tylko to potrzeba do obliczenia odwrotności liczby mieszanej. Zobacz: <math>1\frac{4}{5}=\frac{1\cdot5+4}{5}=\frac{9}{5}</math> Obliczamy odwrotność: <math>\frac{9}{5}\longrightarrow\frac{5}{9}</math> }} {{Mat:Prz |'''Oblicz odwrotność 2,84'''. Powinieneś już wiedzieć, [[#Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie|jak zamienić ułamek dziesiętny na ułamek zwykły]]. Zatem nie będziemy przedstawiali elaboratu dot. tej zamiany. <math>2{,}84=2+\frac{84}{100}=2+\frac{21}{25}=\frac{50+21}{25}=\frac{71}{25}</math> Odwrotność to: <math>\frac{71}{25}\longrightarrow\frac{25}{71}</math> }} === Praca z osią liczbową i obliczanie podziałki === === Porównywanie ułamków zwykłych === == Zadania == 064ijdnan3k95kb4nl2w6jyfnets5lc 559635 559634 2026-10-19T19:02:44Z YxiCode 34510 /* Odwrotność liczby */ 559635 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Trzy postacie jednego ułamka === Omówiliśmy już trzy postacie ułamków: * '''ułamki zwykłe''' - forma <math>\frac{a}{b}</math>, * '''liczby mieszane''' - forma <math>a\frac{b}{c}</math>, * '''ułamki dziesiętne''' - np. 0,8; 38,592. Te formy mogą reprezentować tę samą liczbę. Rozważmy np. <math>\frac{9}{5}</math>. Łatwo zauważyć, że <math>\frac{9}{5}=1\frac{4}{5}</math>. Zarazem możemy to wyrazić jako 1,8. Wszystkie te wyniki są równe! Niektóre ułamki nie posiadają liczby mieszanej, bo są na to za małe. Z klasy IV może pamiętasz, że takie ułamki to są '''ułamki właściwe''' (np. <math>\frac{1}{4}=0{,}25</math>) - gdzie licznik jest mniejszy od mianownika. Takie, które możemy przekształcić na liczby mieszane, to '''ułamki niewłaściwe''' (np. nasze <math>\frac{9}{5}</math>), gdzie licznik jest większy od mianownika. === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki, ale tę samą wartość. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. === Odwrotność liczby === Odwrotność liczby nie należy mylić z jej przeciwieństwem, choć brzmią podobnie. {{Mat:Def |Odwrotność liczby <math>a</math> jest to <math>\frac{1}{a}</math>. }} Krótka i przyjemna definicja - choć zdradliwa. Bowiem co zrobić w przypadku <math>\frac{3}{5}</math>? A <math>1\frac{2}{3}</math>? A 1,56? {{Mat:Prz |'''Oblicz odwrotność <math>\frac{2}{3}</math>'''. '''Krok po kroku''' Z definicji odwrotność tej liczby to <math>\frac{1}{\frac{2}{3}}</math> - ale nam to mało mówi. Zastanówmy się więc, jak to rozpisać. Ułamek to jest inny sposób na wyrażenie ilorazu. Zatem możemy zapisać: <math>\frac{1}{\frac{2}{3}}=1:\frac{2}{3}</math> Dzielenie ułamków było w klasie V. Jak pewnie wiesz, zamieniamy miejscami licznik i mianownik - a zamiast dzielenia, mnożymy. <math>1:\frac{2}{3}=1\cdot\frac{3}{2}=\frac{3}{2}</math> Tak oto obliczyliśmy odwrotność. '''Na skróty''' O wiele szybszą metodą jest zamienienie licznika z mianownikiem od razu. To działa dla jakiegokolwiek ułamka zwykłego. <math>\frac{2}{3}\longrightarrow\frac{3}{2}</math> Dlatego nazywamy dzielenie ułamków "mnożeniem przez '''odwrotność'''". }} {{Mat:Prz |'''Oblicz odwrotność <math>1\frac{4}{5}</math>'''. Wiesz już jak: * [[#Przedstawianie liczb mieszanych w postaci ułamków zwykłych|zamieniać liczbę mieszaną na ułamek niewłaściwy]], * szybko obliczać odwrotność ułamka zwykłego. Tylko to potrzeba do obliczenia odwrotności liczby mieszanej. Zobacz: <math>1\frac{4}{5}=\frac{1\cdot5+4}{5}=\frac{9}{5}</math> Obliczamy odwrotność: <math>\frac{9}{5}\longrightarrow\frac{5}{9}</math> }} {{Mat:Prz |'''Oblicz odwrotność 2,84'''. Powinieneś już wiedzieć, [[#Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie|jak zamienić ułamek dziesiętny na ułamek zwykły]]. Zatem nie będziemy przedstawiali elaboratu dot. tej zamiany. <math>2{,}84=2+\frac{84}{100}=2+\frac{21}{25}=\frac{50+21}{25}=\frac{71}{25}</math> Odwrotność to: <math>\frac{71}{25}\longrightarrow\frac{25}{71}</math> }} Czy zastanawiałeś się, co otrzymamy, gdy wymnożymy ze sobą dwie liczby odwrotne względem siebie? Otóż mają w sobie ważną własność, opisaną w twierdzeniu: {{Mat:Tw |Iloczyn liczby <math>a</math> i jej odwrotności <math>\frac{1}{a}</math> zawsze wynosi 1. Matematycznie: <math>a\cdot\frac{1}{a}=1</math> }} Prawdziwość stwierdzenia można sprawdzić na przykładach liczbowych. Np. <math>5\cdot\frac{1}{5}=\frac{5}{1}\cdot\frac{1}{5}=\frac{5}{5}=1</math>. Pełny dowód możesz znaleźć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Dowód twierdzenia o odwrotności|tutaj]], zalecamy go przeczytać po przerobieniu działu III. === Praca z osią liczbową i obliczanie podziałki === === Porównywanie ułamków zwykłych === == Zadania == 9cslu9w81837uqmzpif3oxnbys76gyq 559637 559635 2026-10-19T19:07:20Z YxiCode 34510 /* Liczby przeciwne */ 559637 wikitext text/x-wiki == Teoria == Liczby możemy uporządkować w zbiory. Dotychczasowo posługiwaliśmy się m.in.: liczbami dodatnimi, liczbami ujemnymi, ułamkami zwykłymi i dziesiętnymi. Każde z tych znajdują swoje miejsce w jednym ze zbiorów: {{Mat:Def|DEFINICJE |* zbiór '''liczb naturalnych''' - np. 0, 1, 2, 3, 4, 5, ... * zbiór '''liczb całkowitych''' - np. ..., -3, -2, -1, 0, 1, 2, 3, ... * zbiór '''liczb wymiernych''' - zbiór wszystkich liczb, które można przedstawić w postaci ułamka zwykłego <math>\frac{p}{q}</math>, gdzie <math>p</math> i <math>q</math> to liczby całkowite, a <math>q</math> jest różne od zera (<math>q\neq0</math>). }} Każda liczba naturalna jest zarazem liczbą całkowitą, jak i wymierną. Każda liczba całkowita jest liczbą wymierną. Liczbami wymiernymi z definicji są wszystkie ułamki zwykłe i dziesiętne, a również liczby mieszane. === Jak wykazać, że liczba jest wymierna? === Definicja liczby wymiernej wskazuje na to, że aby uzasadnić wymierność liczby, należy przedstawić ją w postaci ułamka zwykłego. Rozważmy liczbę '''3'''. {{Mat:Prz |'''Wykaż, że liczba 3 jest wymierna.''' Liczby całkowite, przedstawione jako ułamek zwykły, mają mianownik 1. <math>3=\frac{3}{1}</math> 3 przedstawiliśmy jako ułamek zwykły, zatem jest to liczba wymierna. }} === Przedstawianie liczb mieszanych w postaci ułamków zwykłych === Przypomnij sobie z klasy IV jak zamieniamy liczby mieszane na ułamki niewłaściwe. {{Mat:Prz |'''Zamień <math>4\frac{1}{4}</math> na ułamek zwykły.''' '''Krok po kroku''' Rozdzielamy liczbę mieszaną na sumę liczby całkowitej i części ułamkowej. Zamieniamy liczbę całkowitą na ułamek o mianowniku 1. <math>4\frac{1}{4}=4+\frac{1}{4}=\frac{4}{1}+\frac{1}{4}</math> Wiemy, że aby dodać do siebie ułamki, należy je sprowadzić do wspólnego mianownika. Tym mianownikiem jest 4. <math>\frac{4\cdot4}{4}+\frac{1}{4}=\frac{16}{4}+\frac{1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> <math>4\frac{1}{4}</math> w postaci ułamka zwykłego to <math>\frac{17}{4}</math>. '''Na skróty''' Zauważ, że <math>17=4\cdot4+1</math>. Możemy uogólnić regułę opisaną powyżej. Liczby mieszane to takie liczby, które zapisujemy w formie <math>a\frac{b}{c}</math>, gdzie <math>a,b,c</math> to liczby całkowite. Aby zapisać taką liczbę w postaci ułamka zwykłego, możemy zastosować wzór: <math>a\frac{b}{c}=\frac{a\cdot c+b}{c}</math>. Pełne przekształcenie algebraiczne, które zalecamy zobaczyć '''po''' opanowaniu działu III, możesz zobaczyć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Zamiana liczb mieszanych|tutaj]]. <math>4\frac{1}{4}=\frac{4\cdot4+1}{4}=\frac{16+1}{4}=\frac{17}{4}</math> }} === Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie === Ze wcześniejszych klas zapewne pamiętasz, że ułamki dziesiętne składają się z części przed i po przecinkiem. Po przecinku znajdują się części kolejno: dziesiętne, setne, tysięczne, dziesięcio-tysięczne. To są ułamki zwykłe o mianowniku: 10, 100, 1000, 10 000. Zatem aby zamienić ułamek dziesiętny na ułamek zwykły, należy te części dziesiętne rozpisać. {{Mat:Prz |'''Zamień 0,36 na ułamek zwykły.''' '''Krok po kroku''' Zauważ, że 0,36 to suma części dziesiętnych i setnych: <math>0{,}36=0{,}30+0{,}6</math> Zero na końcu ułamka dziesiętnego nie zmienia jego wartość. Zatem <math>0{,}36=\frac{3}{10}+\frac{6}{100}=\frac{30}{100}+\frac{6}{100}=\frac{36}{100}</math> Warto jest skrócić 36 i 100. W V klasie omawialiśmy NWD i NWW - aby skrócić ułamek, należy znaleźć NWD(36, 100). Nie będziemy tutaj zapisywać obliczeń. Jeżeli potrzebujesz powtórzyć wyznaczanie NWD, zajrzyj do tematu z klasy VIII: [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|IX.2]]. Nie bój się, że to VIII - większość materiału powinna być Ci znana z klas młodszych. <math>\text{NWD}(36,100)=4</math> <math>\frac{36}{100}=\frac{4\cdot9}{4\cdot25}=\frac{9}{25}</math> '''Na skróty''' Można od razu zamienić taką liczbę na ułamek zwykły postępując wg kroków: # Określ, ile jest cyfr po przecinku. # Napisz w mianowniku 1, a potem tyle samo zer, ile jest cyfr. # W liczniku zapisz cyfry ułamka. Spróbujmy tą metodą obliczyć znowu 0,36. # Są 2 cyfry po przecinku. # W mianowniku piszemy 1 i dwa zera - 100. # Cyfry ułamka to 36. Ułamek zwykły to <math>\frac{36}{100}</math>. Skracanie wykonuj tak samo jak w samouczku "Krok po kroku". }} Jeżeli przed przecinkiem zamiast zera jest jakaś inna liczba, wystarczy ją przepisać i rozważyć liczbę mieszaną: 1,5 możemy zamienić na <math>1\frac{5}{10}</math>. Teraz rozważmy zamianę odwrotną - ułamek zwykły na ułamek dziesiętny. W zależności od ułamka, potrzebujemy różnych metod. Drugą z nich, a zarazem uniwersalną omówimy w lekcji [[Matematyka dla ostatnich klas szkoły podstawowej/Postać dziesiętna liczb wymiernych|I.2]]. {{Mat:Prz |'''Zamień <math>\frac{5}{8}</math> na ułamek dziesiętny.''' '''Krok po kroku''' Zauważ, że możesz zapisać jedną z potęg liczby 10 jako iloczyn 8 i jakiejś innej liczby. Jest to m.in. 1000. Aby zobaczyć, jak obliczać która liczba pasuje do pewnej potęgi 10, zobacz [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10|tutaj]] (wymagana wiedza z [[Matematyka dla ostatnich klas szkoły podstawowej/Potęgowanie iloczynów i ilorazów|II.4]]). <math>1000=8\cdot125</math> Skoro tak, to należy rozszerzyć ułamek (klasa IV), mnożąc obie liczby przez 125. <math>\frac{5}{8}=\frac{5\cdot125}{8\cdot125}=\frac{625}{1000}=0{,}625</math> Jeżeli nie rozumiesz ostatniego kroku, przeczytaj ponownie poprzednią ramkę. Ogólny schemat: pomnóż mianownik i licznik przez taką liczbę, aby w mianowniku wyszła potęga dziesiątki. Zamień na ułamek dziesiętny zgodnie z procedurą w poprzedniej ramce, ale na odwrót. '''Na skróty''' Wystarczy po prostu zapamiętać najważniejsze ułamki: {{Blok ramkowy | temat = 2 | tytuł = Rozwinięcia dziesiętne wybranych ułamków zwykłych }} <math>\frac{1}{2}=0{,}5</math>&emsp;&emsp;<math>\frac{1}{4}=0{,}25</math>&emsp;&emsp;<math>\frac{1}{5}=0{,}2</math> <math>\frac{1}{8}=0{,}125</math>&emsp;&emsp;<math>\frac{1}{20}=0{,}05</math>&emsp;&emsp;<math>\frac{1}{25}=0{,}04</math> {{Blok ramkowy/Zamknij}} <math>\frac{5}{8}=5\cdot\frac{1}{8}=5\cdot0{,}125=0{,}625</math> (ostatni krok można przeliczyć np. za pomocą mnożenia pisemnego). '''Teraz ty''': Spróbuj zamienić ułamek <math>\frac{3}{16}</math> na dziesiętny. Wskazówka: podziel jedno z podanych rozwinięć przez 2. }} === Trzy postacie jednego ułamka === Omówiliśmy już trzy postacie ułamków: * '''ułamki zwykłe''' - forma <math>\frac{a}{b}</math>, * '''liczby mieszane''' - forma <math>a\frac{b}{c}</math>, * '''ułamki dziesiętne''' - np. 0,8; 38,592. Te formy mogą reprezentować tę samą liczbę. Rozważmy np. <math>\frac{9}{5}</math>. Łatwo zauważyć, że <math>\frac{9}{5}=1\frac{4}{5}</math>. Zarazem możemy to wyrazić jako 1,8. Wszystkie te wyniki są równe! Niektóre ułamki nie posiadają liczby mieszanej, bo są na to za małe. Z klasy IV może pamiętasz, że takie ułamki to są '''ułamki właściwe''' (np. <math>\frac{1}{4}=0{,}25</math>) - gdzie licznik jest mniejszy od mianownika. Takie, które możemy przekształcić na liczby mieszane, to '''ułamki niewłaściwe''' (np. nasze <math>\frac{9}{5}</math>), gdzie licznik jest większy od mianownika. === Liczby przeciwne === Liczby przeciwne to takie liczby, który mają przeciwne znaki, ale tę samą wartość. {{Mat:Def |Dla danej liczby <math>a</math>, liczba przeciwna do niej to <math>-a</math>. }} Oznacza to, że liczba przeciwna do 5 to <math>-5</math>, a dla <math>-3</math> to 3. Nie zapisujemy plusa ze zwyczaju. Ponieważ zero nie ma znaku, liczba przeciwna do 0 to nadal 0. Wprowadźmy ważne twierdzenie. Gdy mamy np. 10 zł długu, to aby go spłacić, musimy wziąć 10 zł. Matematycznie możemy to opisać jako <math>(-10)+10</math>. Po spłaceniu zostanie nam 0 zł na koncie: <math>(-10)+10=0</math>. Jak widzisz, -10 i 10 to liczby przeciwne. Gdy je dodajemy ze sobą, to wynik wynosi 0. Może się to wydawać oczywiste, ale warto o tym zapamiętać. {{Mat:Tw |Suma liczby <math>a</math> i liczby do niej przeciwnej <math>-a</math> zawsze wynosi 0. Matematycznie: <math>a+(-a)=0</math> }} === Odwrotność liczby === Odwrotność liczby nie należy mylić z jej przeciwieństwem, choć brzmią podobnie. {{Mat:Def |Odwrotność liczby <math>a</math> jest to <math>\frac{1}{a}</math>. }} Krótka i przyjemna definicja - choć zdradliwa. Bowiem co zrobić w przypadku <math>\frac{3}{5}</math>? A <math>1\frac{2}{3}</math>? A 1,56? {{Mat:Prz |'''Oblicz odwrotność <math>\frac{2}{3}</math>'''. '''Krok po kroku''' Z definicji odwrotność tej liczby to <math>\frac{1}{\frac{2}{3}}</math> - ale nam to mało mówi. Zastanówmy się więc, jak to rozpisać. Ułamek to jest inny sposób na wyrażenie ilorazu. Zatem możemy zapisać: <math>\frac{1}{\frac{2}{3}}=1:\frac{2}{3}</math> Dzielenie ułamków było w klasie V. Jak pewnie wiesz, zamieniamy miejscami licznik i mianownik - a zamiast dzielenia, mnożymy. <math>1:\frac{2}{3}=1\cdot\frac{3}{2}=\frac{3}{2}</math> Tak oto obliczyliśmy odwrotność. '''Na skróty''' O wiele szybszą metodą jest zamienienie licznika z mianownikiem od razu. To działa dla jakiegokolwiek ułamka zwykłego. <math>\frac{2}{3}\longrightarrow\frac{3}{2}</math> Dlatego nazywamy dzielenie ułamków "mnożeniem przez '''odwrotność'''". }} {{Mat:Prz |'''Oblicz odwrotność <math>1\frac{4}{5}</math>'''. Wiesz już jak: * [[#Przedstawianie liczb mieszanych w postaci ułamków zwykłych|zamieniać liczbę mieszaną na ułamek niewłaściwy]], * szybko obliczać odwrotność ułamka zwykłego. Tylko to potrzeba do obliczenia odwrotności liczby mieszanej. Zobacz: <math>1\frac{4}{5}=\frac{1\cdot5+4}{5}=\frac{9}{5}</math> Obliczamy odwrotność: <math>\frac{9}{5}\longrightarrow\frac{5}{9}</math> }} {{Mat:Prz |'''Oblicz odwrotność 2,84'''. Powinieneś już wiedzieć, [[#Przedstawianie ułamków dziesiętnych w postaci ułamków zwykłych i odwrotnie|jak zamienić ułamek dziesiętny na ułamek zwykły]]. Zatem nie będziemy przedstawiali elaboratu dot. tej zamiany. <math>2{,}84=2+\frac{84}{100}=2+\frac{21}{25}=\frac{50+21}{25}=\frac{71}{25}</math> Odwrotność to: <math>\frac{71}{25}\longrightarrow\frac{25}{71}</math> }} Czy zastanawiałeś się, co otrzymamy, gdy wymnożymy ze sobą dwie liczby odwrotne względem siebie? Otóż mają w sobie ważną własność, opisaną w twierdzeniu: {{Mat:Tw |Iloczyn liczby <math>a</math> i jej odwrotności <math>\frac{1}{a}</math> zawsze wynosi 1. Matematycznie: <math>a\cdot\frac{1}{a}=1</math> }} Prawdziwość stwierdzenia można sprawdzić na przykładach liczbowych. Np. <math>5\cdot\frac{1}{5}=\frac{5}{1}\cdot\frac{1}{5}=\frac{5}{5}=1</math>. Pełny dowód możesz znaleźć [[Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Dowód twierdzenia o odwrotności|tutaj]], zalecamy go przeczytać po przerobieniu działu III. === Praca z osią liczbową i obliczanie podziałki === === Porównywanie ułamków zwykłych === == Zadania == fde0ogtaasvjpin2lxpi5mz4k89dnkr Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Potęgi liczby 10 0 64427 559623 2026-10-19T16:01:20Z YxiCode 34510 Utworzono nową stronę „Rozkładając liczbę 10 na czynniki pierwsze, otrzymujemy <math>2\cdot5</math>. Poszczególne potęgi 10, czyli: 100, 1000, 10000, to potęgi również tego wyrażenia: <math>(2\cdot5)^2,(2\cdot5)^3,(2\cdot5)^4</math>. Wzór <math>(a\cdot b)^n=a^n\cdot b^n</math> mówi nam, że powyższe wyrażenia możemy uprościć. Przykładowo: <math>100=10^2=(2\cdot5)^2=2^2\cdot5^2</math> Zatem rozważmy ułamek o mianowniku 4. Wiemy, że jest to <math>2\cdot2=2^2</mat…” 559623 wikitext text/x-wiki Rozkładając liczbę 10 na czynniki pierwsze, otrzymujemy <math>2\cdot5</math>. Poszczególne potęgi 10, czyli: 100, 1000, 10000, to potęgi również tego wyrażenia: <math>(2\cdot5)^2,(2\cdot5)^3,(2\cdot5)^4</math>. Wzór <math>(a\cdot b)^n=a^n\cdot b^n</math> mówi nam, że powyższe wyrażenia możemy uprościć. Przykładowo: <math>100=10^2=(2\cdot5)^2=2^2\cdot5^2</math> Zatem rozważmy ułamek o mianowniku 4. Wiemy, że jest to <math>2\cdot2=2^2</math>. Aby obliczyć liczbę, przez którą należy później rozszerzyć ułamek, dzielimy 100 przez 4: <math>\frac{100}{4}=\frac{2^2\cdot5^2}{2^2}=5^2=5\cdot5=25</math> Analogicznie postępujemy dla mianowników, jak: 5, 25, 8, 16. Jednak aby nasza I metoda zadziałała, potrzebujemy albo '''potęgę liczby 2''', '''potęgę liczby 5''' lub '''potęgę liczby 10''' w mianowniku ułamka. Spróbuj samemu uzasadnić, dlaczego tak się dzieje. pv0y7a9z5g5qhtqlvnu6n4pa7uo6qut Matematyka dla ostatnich klas szkoły podstawowej/Rodzaje liczb/Dowód twierdzenia o odwrotności 0 64428 559636 2026-10-19T19:03:37Z YxiCode 34510 Utworzono nową stronę „'''Dowód twierdzenia o iloczynie liczb odwrotnych''' <math>a\cdot\frac{1}{a}=\frac{a}{1}\cdot\frac{1}{a}=\frac{a}{a}=1</math>” 559636 wikitext text/x-wiki '''Dowód twierdzenia o iloczynie liczb odwrotnych''' <math>a\cdot\frac{1}{a}=\frac{a}{1}\cdot\frac{1}{a}=\frac{a}{a}=1</math> 3tukgsg95ulswscw4uk7eh3yykiz2r9