Wikibooks plwikibooks https://pl.wikibooks.org/wiki/Wikibooks:Strona_g%C5%82%C3%B3wna MediaWiki 1.47.0-wmf.23 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 Szablon:Fmbox/styles.css 10 33015 558953 558812 2026-10-09T08:44:19Z Persino 2851 558953 sanitized-css text/css div.tabelka-op.fmbox-op{ display:flex; flex-direction:row; width:auto; } div.tabelka-op.fmbox-op > table.fmbox{ width:100%; } table.fmbox { clear: both; margin: 0.2em 0; width: 100%; border: 1px solid #a2a9b1; background: #f8f9fa; /* Default "system" gray */ box-sizing:border-box; } table.fmbox-system { background: #f8f9fa; } table.fmbox-warning { border: 1px solid #bb7070; /* Dark pink */ background: #ffdbdb; /* Pink */ } table.fmbox-editnotice { background: transparent; } /*{{Kategoria|Szablony - arkusze stylów}}*/ 4jw2hv4ekrx08mhw8alb2dny3ppj8k7 558954 558953 2026-10-09T09:16:08Z Persino 2851 558954 sanitized-css text/css div.tabelka-op.fmbox-op{ display:flex; flex-direction:row; width:auto; box-sizing:border-box; } div.tabelka-op.fmbox-op > table.fmbox{ width:100%; } table.fmbox { clear: both; margin: 0.2em 0; width: 100%; border: 1px solid #a2a9b1; background: #f8f9fa; /* Default "system" gray */ box-sizing:border-box; } table.fmbox-system { background: #f8f9fa; } table.fmbox-warning { border: 1px solid #bb7070; /* Dark pink */ background: #ffdbdb; /* Pink */ } table.fmbox-editnotice { background: transparent; } /*{{Kategoria|Szablony - arkusze stylów}}*/ lhoxsrevgjqcnfksa8rndd6j3k6lf2h Moduł:Szablonowe/Potrzebne 828 60145 558947 558527 2026-10-08T17:26:16Z Persino 2851 558947 Scribunto text/plain local p={}; function p.TranslatorProstyTekstDoEncodeWikiTekst(tekst) local szablonowe_modul=require("Module:Szablonowe"); tekst=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(),function(obiekt,kod) return szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(obiekt,kod); end); return tekst; end; function p.TranslatorOdwrotnyEncodeWikiTekstDoTekst(tekst) local szablonowe_modul=require("Module:Szablonowe"); tekst=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod) return szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end); return tekst; end; function p.AtrybutyZnacznika(atrybuty,nazwa_modulu,tab_element,tab_atrybuty) local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); local html_modul=require("Module:Html"); local tab_specjalne; if(tab_element)then atrybuty=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(atrybuty,nazwa_modulu,tab_element,function(szablon,obiekt,kod) if(obiekt=="UCIECZKI")then return szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(obiekt,kod); end; return szablon; end); else tab_specjalne={};local ile=1; atrybuty=mw.ustring.gsub(atrybuty,"(\\[\"'])",function(wyraz_specjalny) local wyraz=szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu("UCIECZKI",ile); tab_specjalne[wyraz]=wyraz_specjalny; ile=ile+1; return wyraz; end); end; atrybuty=" "..atrybuty.." "; local tab_atrybuty=tab_atrybuty or {}; local __metatable=getmetatable(tab_atrybuty); local __tab_atrybuty=__metatable and {} or nil; local __start=1; while(true)do local start,koniec,szablon,name,_,value,_=mw.ustring.match(atrybuty,"(%s+(%a+)%s*=%s*([\"'])(.-)(%3)%s+)",__start); if((not szablon)or(not name)or(not value))then break;end; __start=koniec; local tekst=szablonowe_modul.ZnacznikoweTrueFalseSzeregZnakowy(html_modul.TekstoweKodyHtmlZnacznikoweTypowoTagoweParametroweZamienianiaNaZnak(value)); if(__metatable)then table.insert(__tab_atrybuty,{name,tekst,start,}); else tab_atrybuty[name]=tekst; end; end; __start=1; while(true)do local start,koniec,szablon,name,value=mw.ustring.match(atrybuty,"(%s+(%a+)%s*=%s*([%a%d]+)%s+)",__start); if((not szablon)or(not name)or(not value))then break;end; __start=koniec; local tekst=szablonowe_modul.ZnacznikoweTrueFalseSzeregZnakowy(value); if(__metatable)then table.insert(__tab_atrybuty,{name,tekst,start,}); else tab_atrybuty[name]=tekst; end; end; __start=1; while(true)do local start,koniec,szablon,name=mw.ustring.match(atrybuty,"(%s+(%a+)%s+)",__start); if(not name)then break;end; __start=koniec; if(__metatable)then table.insert(__tab_atrybuty,{name,true,start,}); else tab_atrybuty[name]=tekst; end; end; if(__metatable)then table.sort(__tab_atrybuty,function(a,b) return (a[3]<b[3]); end) ; for name,tab_value in ipairs(__tab_atrybuty)do tab_atrybuty[tab_value[1]]=tab_value[2]; end; end; local parametry_modul=require("Module:Parametry"); for name,value in pairs(tab_atrybuty) do if(not parametry_modul.TypeBoolean(value))then local value;local ile; if(tab_element)then value,ile=mw.ustring.gsub(atrybuty,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu("UCIECZKI"),function(obiekt,kod) kod=tonumber(kod) or nil; local szablon=(tab_element[obiekt] or {})[kod]; return szablon; end); else value,ile=mw.ustring.gsub(value,"("..szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu("UCIECZKI")..")",function(wyraz) local wynik=tab_specjalne[wyraz]; return wynik; end); end; if(ile>0)then tab_atrybuty[name]=value; end; end; end; return tab_atrybuty; end; function p.UstawianieMetatabelki(tab_co,obiekt,__FUNKCJA_PARAMETRY) local __metatablica=getmetatable(tab_co); local czy_ustawiona_metatabelka=__metatablica and true or false; if(not __metatablica)then __metatablica={}; p.MetaTabelkaSzablonowe(__metatablica); setmetatable(tab_co,__metatablica); end; if((__FUNKCJA_PARAMETRY)and(not czy_ustawiona_metatabelka))then __metatablica.UstawFunkcjaDaneParametry(__FUNKCJA_PARAMETRY,obiekt); end; local tablica_co=__metatablica.tablica(); return tablica_co; end; function p.KodowanieAtrybutoweZnacznikowe(tekst_artykulu,nazwa_modulu,tab_element,numer_szablonu,__FUNKCJA_PARAMETRY) local szablonowe_modul=require("Module:Szablonowe"); local function ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon,nazwa,czy_tak) nazwa=nazwa or "ATRYBUTY"; local tab_nazwa;local ile; if(numer_szablonu)then tab_nazwa=p.UstawianieMetatabelki(tab_element[nazwa],nazwa,__FUNKCJA_PARAMETRY); tab_nazwa[numer_szablonu[nazwa]]={szablon,false,}; ile=numer_szablonu[nazwa]; numer_szablonu[nazwa]=numer_szablonu[nazwa]+1; else if(not tab_element[nazwa])then tab_element[nazwa]={}; end; tab_nazwa=tab_element[nazwa]; tab_nazwa[#tab_nazwa+1]=szablon; ile=#tab_nazwa; end; if(not czy_tak)then local szablon_kod=szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa,ile); return szablon_kod; else local szablon_kod=szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(nazwa,ile); return szablon_kod; end; end; local function ZNAKI_UCIECZKI(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(([\\]*)(\\[\"']))",function(szablon,przed,po) local ile=#przed; if(math.fmod(ile,2)==0)then szablon=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon,"UCIECZKI",true); return szablon; end; return nil; end); return tekst_artykulu; end; local function ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow) local _, ile=mw.ustring.gsub(szablon2,"("..cudzyslow..")",function(s)return nil;end); if(math.fmod(ile,2)==0)then szablon2=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon2,nil,true); return szablon1..szablon2..szablon3,true; else szablon2=mw.ustring.gsub(szablon2,"("..cudzyslow..".*"..cudzyslow..")(.-"..cudzyslow.."[^"..cudzyslow.."]*)$",function(__szablon1,__szablon2) __szablon1=ROZWAZANIA_SZABLONOWE_ATRYBUTY(__szablon1,nil,true); return __szablon1..__szablon2; end); szablon3=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon3,"KOŃCOWE",true); return szablon1..szablon2..szablon3,false; end; end; tekst_artykulu=ZNAKI_UCIECZKI(tekst_artykulu); local KodowaniaZnakoweAtrybutoweNieucieczkowe=function(tekst_artykulu,wzor) repeat local ile_naprawy_znacznikow=nil; local ile_naprawy_znacznikow_odejmnoc=0; tekst_artykulu,ile_naprawy_znacznikow=mw.ustring.gsub(tekst_artykulu,wzor,function(szablon1,szablon2,cudzyslow,szablon3) local szablon,tak=ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow); if(tak)then ile_naprawy_znacznikow_odejmnoc=ile_naprawy_znacznikow_odejmnoc+1;end; return szablon; end); ile_naprawy_znacznikow=ile_naprawy_znacznikow-ile_naprawy_znacznikow_odejmnoc; until(ile_naprawy_znacznikow==0); return tekst_artykulu; end; tekst_artykulu=KodowaniaZnakoweAtrybutoweNieucieczkowe(tekst_artykulu,"(</?[%a%d]+%s+)([^<>]-([\"']).-%3[^<>]-)(/?>)"); local PodmienianieSzablonoweEncodeWikiTestuNaTekstu=function(obiekt,kod,ile) kod=tonumber(kod) or nil; local szablon=(tab_element[obiekt] or {})[kod]; if(not szablon)then return nil;end; local szablon_kodowy=szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); ile=ile+1; return szablon_kodowy,ile; end; tekst_artykulu=mw.ustring.gsub(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod) if(obiekt~="UCIECZKI")then local szablon_kodowy,ile=PodmienianieSzablonoweEncodeWikiTestuNaTekstu(obiekt,kod,0); if(not szablon_kodowy)then return nil;end; return szablon_kodowy; end; return nil; end); tekst_artykulu=szablonowe_modul:ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(tekst_artykulu,nazwa_modulu,tab_element, function(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica) local ile=0; local szablon=mw.ustring.gsub(szablon,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod) if(obiekt~="UCIECZKI")then local szablon_kodowy; szablon_kodowy,ile=PodmienianieSzablonoweEncodeWikiTestuNaTekstu(obiekt,kod,ile); if(not szablon_kodowy)then return nil;end; return szablon_kodowy; end; return nil; end); if(ile==0)then return nil;end; return true,szablon,obiekt,kod; end); tekst_artykulu=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu,nazwa_modulu,tab_element,function(szablon,obiekt,kod) if(obiekt=="KOŃCOWE")then return szablon; end; return nil,true; end); return tekst_artykulu,tab_element; end; function p.MetaTabelkaSzablonowe(__metatablica) local tablica={};local __FUNKCJA; __metatablica.UstawTablica=function(tablica_inna) return function() return tablica_inna or tablica; end; end; __metatablica.UstawFunkcjaDaneParametry=function(__FUNKCJA_start,obiekt) __FUNKCJA=__FUNKCJA_start(obiekt); end; local fun_tablica=__metatablica.UstawTablica(tablica); __metatablica.tablica=function() return fun_tablica(); end; __metatablica.__len=function(t) return #fun_tablica(); end; __metatablica.__index=function(t,klucz) local tab=fun_tablica()[klucz]; if(tab==nil)then return nil;end; return tab[1]; end; __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; local function iter_pairs(tablica,klucz) klucz=next(tablica,klucz); local tab = tablica[klucz]; if tab then return klucz, tab[1]; end end; __metatablica.__pairs=function(t) return iter_pairs,fun_tablica(),nil; end; local function iter_ipairs(a,i) i=i+1; local v = a[i]; if v then return i, v; end end; __metatablica.__ipairs=function(t) return iter_ipairs,fun_tablica(),0; end; __metatablica.KopiujMetaTabela=function(value,funkcja,funkcja2) local tabelka_metatable=__metatablica.tablica(); local __metatablica2={}; p.MetaTabelkaSzablonowe(__metatablica2); local value2={}; local iteratorFun=function(value) local klucz=nil; return function() klucz=next(value,klucz); return klucz; end; end; local iterator=iteratorFun(value); for klucz in iterator do rawset(value2,klucz,rawget(value,klucz)); end; setmetatable(value2,__metatablica2); local tabelka_metatable2=__metatablica2.tablica(); funkcja2(tabelka_metatable,tabelka_metatable2); funkcja(value2,false); end; end; function p.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_poczatek,__FUNKCJA_koniec,__FUNCTION_niedokonczone,__FUNCTION_INCLUDE,__FUNKCJA_PARAMETRY) local numer_szablonu; local strony_modul=require("Module:Strony"); local szeregi_modul=require("Module:Szeregi"); local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane"); local szablonowe_modul=require("Module:Szablonowe"); local specjalne_modul=require("Module:Specjalne"); local tab_wiki_znacznik=szablonowe_dane_modul.tablica_wiki_znaczniki; local tablica_znacznikowa_preprocesora_szablonowego=szablonowe_dane_modul.tablica_znacznikowa_preprocesora_szablonowego; local function InicjujNumeryPoczatkoweObiektowSzablonow() if(not __FUNKCJA3)then numer_szablonu={}; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_szablonowe_mediawiki)do numer_szablonu[obiekt]=1; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do numer_szablonu[obiekt]=1; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_atrybutowe_znacznikowe_mediawiki)do numer_szablonu[obiekt]=1; end; else numer_szablonu=__FUNKCJA3(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; end; local PREWSTAWIAJACA=nil;local NiedokonczoneElementyWikikodu=nil;local czy_wynik=true; local function ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,co) if(__FUNKCJA2)then local wynik=__FUNKCJA2(szablon,co,numer_szablonu[co or "SZABLON"],tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu); if(wynik)then numer_szablonu[co or "SZABLON"]=numer_szablonu[co or "SZABLON"]+1; wynik=(czy_wynik and PREWSTAWIAJACA) and PREWSTAWIAJACA(wynik) or wynik; return wynik,false; end; end; if(__FUNKCJA)then szablon=__FUNKCJA(szablon,co,numer_szablonu[co or "SZABLON"]) or szablon; end; local kod=szablonowe_modul.NormaKoduKodowaniaTekstu(co,numer_szablonu[co or "SZABLON"]); --- local tab_co=tablica_analizy_obiektow_strony_dany_modul[co or "SZABLON"]; local obiekt=co or "SZABLON"; local tablica_co=p.UstawianieMetatabelki(tab_co,obiekt,__FUNKCJA_PARAMETRY); tablica_co[numer_szablonu[obiekt]]={szablon,false,}; --- numer_szablonu[obiekt]=numer_szablonu[obiekt]+1; return kod,true; end; local function AnalizaObiektowSzablonowegoTekstu(tekst_artykulu) local ile_znacznik_niedomykajacy_0;local ile_znacznik_niedomykajacy_1;local ile_znacznik_niedomykajacy_2; local techniczne_modul=require("Module:Techniczne"); local tab_licznik_poczatek={}; local tab_licznik_koniec={}; local tab_element={}; local ObiektFun=function(nazwa) return szablonowe_dane_modul.tablica_znaczniki_typowo_mechanizmu_mediawiki[nazwa] or (__FUNCTION_INCLUDE and __FUNCTION_INCLUDE(nazwa) and tablica_znacznikowa_preprocesora_szablonowego[nazwa] and "INCLUDE" or nil) or (tab_wiki_znacznik[nazwa] and "ZNACZNIK" or nil); end; local INCLUDE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[^<>]") end; local INNEPRE=function(tekst_artykulu,czy_poczt,czy_szablon) local function INNEPREROZ(poczatek,koniec) repeat local ile;local ile2=0; tekst_artykulu,ile=mw.ustring.gsub(tekst_artykulu,(poczatek and "\n" or "^").."([^%S\n]+)([^\n]*)"..(koniec and "\n" or "$"),function(spacje,kod) if((not czy_szablon)or((czy_szablon)and((not mw.ustring.match(kod,"[|=]"))and((koniec)and true or (not mw.ustring.match(kod,"^[^%S\n]*$"))))))then kod=NiedokonczoneElementyWikikodu(kod); local szablon=spacje..kod; return (poczatek and "\n" or "")..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"INNEPRE")..(koniec and "\n" or ""); else ile2=ile2+1; end; end); ile=ile-ile2; until (ile==0); end; if(not czy_poczt)then INNEPREROZ(false,true); INNEPREROZ(false,false); end; INNEPREROZ(true,true); INNEPREROZ(true,false); return tekst_artykulu; end; local tab_znaczniki={}; local tab_numerki={}; local function PreprocesorSzablonow(tekst_artykulu) tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul=p.KodowanieAtrybutoweZnacznikowe(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu,__FUNKCJA_PARAMETRY); local function ZnacznikiWiki(tekst_artykulu,czy_zawsze,czy_inne) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)([%a%d]+)(%s*)([^<>]-)(%s*)>",function(koniec,nazwa,odstepy_przed,tekst,odstepy_po) ----- if((odstepy_przed=="")and((tekst~="")and(tekst~="/")))then return;end; if(koniec=="")then local nazwa=mw.ustring.lower(nazwa); table.insert(tab_znaczniki,nazwa); local koniec_samozamykajacy=mw.ustring.match(tekst,"^(.-)%s*(/?)%s*$"); if(koniec_samozamykajacy=="/")then tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1; end; tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1; if(not tab_numerki[nazwa])then tab_numerki[nazwa]={};end; table.insert(tab_numerki[nazwa],tab_licznik_poczatek[nazwa]); local licznik=tab_licznik_poczatek[nazwa]; local szablon=nazwa..odstepy_przed..tekst..odstepy_po; if(not tab_element)then tab_element={};end; local typ=ObiektFun(nazwa); if(not typ)then return "&lt;"..koniec..nazwa..odstepy_przed..tekst..odstepy_po.."&gt;"; end; --- local czy_znacznik=(typ=="ZNACZNIK"); local czy_include=(typ=="INCLUDE"); local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and ((not czy_include)and "innebegin" or "incbegin") or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and "begin" or nil); if(not jak)then return;end; ---- if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end; tab_element[nazwa..jak][licznik]=szablon; return "<"..szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">"; else local nazwa=mw.ustring.lower(nazwa); tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1; local licznik; if(#tab_znaczniki>0)then if(tab_znaczniki[#tab_znaczniki]~=nazwa)then local koniec=0; for i=#tab_znaczniki-1,1,-1 do if(tab_znaczniki[i]==nazwa)then koniec=i; break; end; end; if(koniec>0)then licznik=tab_numerki[nazwa][#tab_numerki[nazwa]]; for i=koniec+1,#tab_znaczniki,1 do tab_licznik_koniec[tab_znaczniki[i]]=(tab_licznik_koniec[tab_znaczniki[i]] or 0)+1; end; for i=koniec,#tab_znaczniki,1 do table.remove(tab_numerki[tab_znaczniki[i]]); end; for i=#tab_znaczniki,koniec,-1 do table.remove(tab_znaczniki); end; else tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1; licznik=tab_licznik_poczatek[nazwa]; end; else licznik=tab_numerki[nazwa][#tab_numerki[nazwa]]; table.remove(tab_numerki[nazwa]); table.remove(tab_znaczniki); end; else tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1; licznik=tab_licznik_koniec[nazwa]; end; local szablon=nazwa..odstepy_przed..tekst..odstepy_po; if(not tab_element)then tab_element={};end; local typ=ObiektFun(nazwa); if(not typ)then return "&lt;"..koniec..nazwa..odstepy_przed..tekst..odstepy_po.."&gt;"; end; --- local czy_znacznik=(typ=="ZNACZNIK"); local czy_include=(typ=="INCLUDE"); local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and ((not czy_include)and "inneend" or "incend") or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and "end" or nil); if(not jak)then return;end; --- if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end; tab_element[nazwa..jak][licznik]=szablon; return "</"..szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">"; end; end); return tekst_artykulu; end; tekst_artykulu=ZnacznikiWiki(tekst_artykulu,false,true); local function ZnacznikiWikiLinia(tekst_artykulu,wzor1,wzor2) tekst_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_artykulu, function(linia) local a;local b; a=mw.ustring.match(linia,wzor1); if(not a)then a,b=mw.ustring.match(linia,wzor2); if(not a)then return nil;end; end; if(b)then b=ZnacznikiWiki(b,false,false); return a..b; else a=ZnacznikiWiki(a,false,false); return a; end; end); return tekst_artykulu; end; ---- tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$","^([%*#;:]+)([^\n]+)$"); tekst_artykulu=ZnacznikiWiki(tekst_artykulu,false,false); ---- local function AnalizujDomykajace(tekst_artykulu,jak,co) local tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak..co,"(%d+)")..")>",function(poczatek,nazwa_przed_nieodkodowane,obiekt,kod) local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element); local nazwa,odstepy,atrybuty,koniec=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*(/?)%s*$"); nazwa=mw.ustring.lower(nazwa); if((koniec=="/")or(nazwa=="br")or(nazwa=="hr")or(nazwa=="templatestyles"))then local szablon="<"..poczatek..nazwa_przed..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,ObiektFun(nazwa)); end; return nil; end); return tekst_artykulu; end; tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne","begin"); tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"","begin"); tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne","end"); tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"","end"); ---- return tekst_artykulu; end; tekst_artykulu=PreprocesorSzablonow(tekst_artykulu); local function Kompilacja(tekst_artykulu) ---- local ZamianaLINKWNaLINKZ=function(zawartosc,dalej) local czy_url=strony_modul.SprawdzanieURL(zawartosc); if(czy_url)then local szablon="["..zawartosc.."]"; return "["..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKZ").."]"..dalej; else if((dalej)and(dalej~=""))then if(specjalne_modul["CzyAdresLinkuWewnętrznego"]{adres=zawartosc,})then local szablon; if(mw.ustring.match(zawartosc,"|"))then szablon="[["..zawartosc..dalej.."]]"; else local nazwa=mw.ustring.gsub(zawartosc,"^[%s_]*:[%s_]*",""); szablon="[["..zawartosc.."|"..nazwa..dalej.."]]"; end; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW"); end; end; local szablon="[["..zawartosc.."]]"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW")..dalej; end; end; local PracePrzygotowywujace; NiedokonczoneElementyWikikodu=function(tekst_artykulu,czy_main) local function DomykajaceIOdtwierajace(tekst_artykulu,jak,tablica_znacznikow) repeat local ile_znacznik_niedomykajacy; local ile_znacznik_niedomykajacy_ujemny=0; tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."begin","(%d+)")..")>(.*)$",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc) local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element); if(tablica_znacznikow)then if(not tablica_znacznikow[nazwa_przed])then ile_znacznik_niedomykajacy_ujemny=ile_znacznik_niedomykajacy_ujemny+1; return nil; end; end; zawartosc=INNEPRE(zawartosc,true); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*$"); local szablon="<"..nazwa_przed..">"..zawartosc..((mw.ustring.match(zawartosc,"\n=[^\n]*[^%s=][^\n]*=[^%S\n]*$") or mw.ustring.match(zawartosc,"\n[%*#:;][^\n]*$") ) and "\n" or "").."</"..nazwa..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK"); end); ile_znacznik_niedomykajacy=ile_znacznik_niedomykajacy-ile_znacznik_niedomykajacy_ujemny; until (ile_znacznik_niedomykajacy==0); repeat local ile_znacznik_nieotwierajacy; local ile_znacznik_nieotwierajacy_ujemny=0; tekst_artykulu,ile_znacznik_nieotwierajacy=mw.ustring.gsub(tekst_artykulu,"^(.*)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."end","(%d+)")..")>",function(zawartosc,nazwa_po_nieodkodowane,obiekt,kod) local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element); if(tablica_znacznikow)then if(not tablica_znacznikow[nazwa_po])then ile_znacznik_nieotwierajacy_ujemny=ile_znacznik_nieotwierajacy_ujemny+1; return nil; end; end; zawartosc=INNEPRE(zawartosc); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_po,"^([%a%d]+)(%s*)(.-)%s*$"); local szablon="<"..nazwa..">"..((mw.ustring.match(zawartosc,"^=[^\n]*[^%s=][^\n]*=[^%S\n]*\n") or mw.ustring.match(zawartosc,"^[%*#:;][^\n]*\n") ) and "\n" or "")..zawartosc.."</"..nazwa_po..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK"); end); ile_znacznik_nieotwierajacy=ile_znacznik_nieotwierajacy-ile_znacznik_nieotwierajacy_ujemny; until (ile_znacznik_nieotwierajacy==0); return tekst_artykulu; end; if(__FUNCTION_niedokonczone)then local wynik,gdy_nie,tablica_znacznikow,czy_koniec,__FUNCTION=__FUNCTION_niedokonczone(tekst_artykulu,tab_element); if(gdy_nie)then if(czy_koniec)then return wynik or tekst_artykulu;end; tekst_artykulu=wynik or tekst_artykulu; tekst_artykulu=__FUNCTION and __FUNCTION(tekst_artykulu) or tekst_artykulu; tekst_artykulu=tablica_znacznikow and DomykajaceIOdtwierajace(tekst_artykulu,"",tablica_znacznikow) or tekst_artykulu; return tekst_artykulu; else tekst_artykulu=wynik or tekst_artykulu; end; end; local function DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu) repeat local ile_wikitabela_1; tekst_artykulu,ile_wikitabela_1=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"({|)(.-)$", function(szereg,numer,licznik_wzor,numer_a,numer_b,poczatek,szablon) return mw.ustring.match(szablon,"\n%{%|"),((licznik_wzor==1)and 2 or 3); end, function(licznik_wzor,poczatek,szablon) szablon=INNEPRE(szablon,true); szablon=NiedokonczoneElementyWikikodu(szablon); szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element); return (((czy_main)and(licznik_wzor==1)) and "" or "\n")..ZamienObiektSzablonuKodem(self,poczatek..szablon.."\n|}",tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA"); end, function(wzor,licznik_wzor,czy) if(czy_main)then if(licznik_wzor==1)then return "^"..wzor,true;end; return "\n"..wzor,false; else return "\n"..wzor,false; end; end); until (ile_wikitabela_1==0); repeat local ile_wikitabela_2; tekst_artykulu,ile_wikitabela_2=mw.ustring.gsub(tekst_artykulu,"^(.-)(\n|})",function(szablon,koniec) szablon=INNEPRE(szablon); szablon=NiedokonczoneElementyWikikodu(szablon); szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element); return ZamienObiektSzablonuKodem(self,"\n{|\n"..szablon..koniec,tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA"); end); until (ile_wikitabela_2==0); return tekst_artykulu; end; local function DomykajaceIOdtwierajaceLinia(tekst_artykulu,wzor_dodatnie,wzor_ujemne) tekst_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_artykulu,function(linia) local dodatnie=nil; local a,b,c=mw.ustring.match(linia,wzor_dodatnie); if((not a)or(not b)or(not c))then a,b=mw.ustring.match(linia,wzor_ujemne); if((not a)or(not b))then return nil;end; c=nil; else dodatnie=true; end; if(dodatnie)then b=DomykajaceIOdtwierajace(b,""); return a..b..c; else b=DomykajaceIOdtwierajace(b,""); return a..b; end; end); return tekst_artykulu; end; --- tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne"); ----- local wzor_dodatnie="^(=+[^%S\n]*)([^\n]-[^%s=][^\n]-)([^%S\n]*=+[^%S\n]*)$"; local wzor_ujemne="^([%*#;:]+[^%S\n]*)([^\n]+)$"; tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,wzor_dodatnie,wzor_ujemne); ----- --- --tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne"); tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,""); tekst_artykulu=DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu); return tekst_artykulu; end; local function ZNACZNIKI(tekst_artykulu,jak) local ile_odjac_znacznik_niedomykajacy=0; local tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."begin","(%d+)")..")>(.-)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("(%2)"..jak.."end","(%3)")..")>",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc,nazwa_po_nieodkodowane,obiekt2,kod2) local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element); local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*$"); nazwa=mw.ustring.lower(nazwa); local function TenZnacznik() local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); if(jak=="")then zawartosc=INNEPRE(zawartosc,true); end; local szablon="<"..nazwa_przed..">"..zawartosc.."</"..nazwa_po..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,ObiektFun(nazwa)); end; local function InneZnacznik() ile_odjac_znacznik_niedomykajacy=ile_odjac_znacznik_niedomykajacy+1; local szablon="<"..nazwa_przed_nieodkodowane..">"..zawartosc.."</"..nazwa_po_nieodkodowane..">"; return szablon; end; if(not mw.ustring.match(atrybuty,"^%s*$"))then if(odstepy~="")then if((jak~="")and(jak~="inc"))then return TenZnacznik(); end; else return InneZnacznik(); end; else if((jak~="")and(jak~="inc"))then return TenZnacznik(); end; end; ---- local ile_zastapione;local ile_pominiete; zawartosc,ile_zastapione,ile_pominiete=ZNACZNIKI(zawartosc,jak); zawartosc=PracePrzygotowywujace(zawartosc); zawartosc=INNEPRE(zawartosc,true); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); return TenZnacznik(); end); return tekst_artykulu,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy; end; ---- PracePrzygotowywujace=function(tekst_artykulu,czy_main) local ile_linkw;local ile_linkz;local ile_var;local ile_template;local ile_wikitabela; local function Szablon(zawartosc,przed,po,obiekt,czy_linkw,dalej) local ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy; zawartosc,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy=ZNACZNIKI(zawartosc,""); zawartosc=PracePrzygotowywujace(zawartosc); zawartosc=INNEPRE(zawartosc,true,(obiekt=="SZABLON")); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); if(czy_linkw)then return ZamianaLINKWNaLINKZ(zawartosc,dalej); else local szablon=przed..zawartosc..po; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,obiekt); end; end; repeat repeat tekst_artykulu,ile_linkw=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"%[%[(.-%[?)%]%](%]?)(%l*)", function(szereg,numer,numer_a,numer_b,szablon,dodatkowe,dalej) local czy_dalej_kwadratowe=mw.ustring.match(szablon,"%[%["); if(czy_dalej_kwadratowe)then return czy_dalej_kwadratowe,2; else return mw.ustring.match(szablon,"^%["),3; end; end, function(szablon,dodatkowe,dalej) if(dodatkowe~="")then local czy_linkz=mw.ustring.match(szablon,"%[[^%[%]]*$"); if(czy_linkz)then szablon=szablon..dodatkowe; return Szablon(szablon,"[[","]]","LINKW",true,dalej); else return Szablon(szablon,"[[","]]","LINKW",true,"")..dodatkowe..dalej; end; else return Szablon(szablon,"[[","]]","LINKW",true,dalej); end; end); until (ile_linkw==0); tekst_artykulu,ile_linkz=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"%[(.-)%]", function(szereg,numer,numer_a,numer_b,szablon) return mw.ustring.match(szablon,"%["),1; end, function(szablon) return Szablon(szablon,"[","]","LINKZ"); end); repeat tekst_artykulu,ile_var=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{{{(.-)}}}", function(szereg,numer,numer_a,numer_b,szablon) local czy_dalej_klamerka=mw.ustring.match(szablon,"%{%{%{"); if(czy_dalej_klamerka)then return czy_dalej_klamerka,3; else return mw.ustring.match(szablon,"^%{"),4; end; end, function(szablon) return Szablon(szablon,"{{{","}}}","ZMIENNA"); end); until (ile_var==0); tekst_artykulu,ile_template=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{{(.-)}}", function(szereg,numer,numer_a,numer_b,szablon) local czy_dalej_klamerka=mw.ustring.match(szablon,"%{%{"); if(czy_dalej_klamerka)then return czy_dalej_klamerka,2; else return mw.ustring.match(szablon,"^%{"),3; end; end, function(szablon) return Szablon(szablon,"{{","}}","SZABLON"); end); tekst_artykulu,ile_wikitabela=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{|(.-)\n|}", function(szereg,numer,licznik_wzor,numer_a,numer_b,szablon) return mw.ustring.match(szablon,"\n%{%|"),(czy_main and ((licznik_wzor==1) and 2 or 3) or 3); end, function(licznik_wzor,szablon) if((czy_main)and(licznik_wzor==1))then return Szablon(szablon,"{|","\n|}","WIKITABELA"); else return "\n"..Szablon(szablon,"{|","\n|}","WIKITABELA"); end; end, function(wzor,numer_begin,czy) if(czy_main)then if(numer_begin==1)then return "^"..wzor,true;end; return "\n"..wzor,false; else return "\n"..wzor,false; end; end); until ((ile_linkw==0)and(ile_linkz==0)and(ile_var==0)and(ile_template==0)and(ile_wikitabela==0)); return tekst_artykulu; end; ---- local ile_odjac_znacznik_niedomykajacy_0; if(__FUNCTION_INCLUDE)then tekst_artykulu,ile_znacznik_niedomykajacy_0,ile_odjac_znacznik_niedomykajacy_0=ZNACZNIKI(tekst_artykulu,"inc"); ile_znacznik_niedomykajacy_0=ile_znacznik_niedomykajacy_0-ile_odjac_znacznik_niedomykajacy_0; ---- tekst_artykulu=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul) if(obiekt=="INCLUDE")then local nazwa,zawartosc,tab=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); if(__FUNCTION_INCLUDE(nazwa))then local function inc(zawartosc) return (mw.ustring.match(tekst_artykulu,"{{{[^{}|]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."%s*}}}") or mw.ustring.match(tekst_artykulu,"{{.-|.-"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)..".-}}") )and true or false; end; if(nazwa=="noinclude")then if(poziom_iteracji==0)then return (not inc(zawartosc)) and "" or zawartosc; else return zawartosc; end; elseif(nazwa=="includeonly")then if(poziom_iteracji==0)then return (not inc(zawartosc)) and zawartosc or ""; else return ""; end; end; end; end; return nil,true; end); end; ---- local ile_odjac_znacznik_niedomykajacy_1; tekst_artykulu,ile_znacznik_niedomykajacy_1,ile_odjac_znacznik_niedomykajacy_1=ZNACZNIKI(tekst_artykulu,"inne"); ile_znacznik_niedomykajacy_1=ile_znacznik_niedomykajacy_1-ile_odjac_znacznik_niedomykajacy_1; ---- tekst_artykulu=PracePrzygotowywujace(tekst_artykulu,true); ---- local ile_odjac_znacznik_niedomykajacy_2; tekst_artykulu,ile_znacznik_niedomykajacy_2,ile_odjac_znacznik_niedomykajacy_2=ZNACZNIKI(tekst_artykulu,""); return tekst_artykulu; end; PREWSTAWIAJACA=function(tekst_artykulu) czy_wynik=nil; tekst_artykulu=PreprocesorSzablonow(tekst_artykulu); tekst_artykulu=Kompilacja(tekst_artykulu); czy_wynik=true; return tekst_artykulu; end; tekst_artykulu=Kompilacja(tekst_artykulu) local function PoczatekKoniecTekst(tekst_artykulu) local tekst_poczatek=(__FUNKCJA_poczatek and __FUNKCJA_poczatek(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or nil); local tekst_koniec=(__FUNKCJA_koniec and __FUNKCJA_koniec(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or nil); if(((tekst_poczatek)and(not mw.ustring.match(tekst_poczatek,"^%s*$")))or((tekst_koniec)and(not mw.ustring.match(tekst_koniec,"^%s*$"))))then tekst_poczatek=tekst_poczatek and PREWSTAWIAJACA(tekst_poczatek) or tekst_poczatek; tekst_koniec=tekst_koniec and PREWSTAWIAJACA(tekst_koniec) or tekst_koniec; tekst_artykulu=(tekst_poczatek or "")..tekst_artykulu..(tekst_koniec or ""); end; return tekst_artykulu; end; tekst_artykulu=PoczatekKoniecTekst(tekst_artykulu); local function PraceKoncowe(tekst_artykulu) tekst_artykulu=NiedokonczoneElementyWikikodu(tekst_artykulu,true); return tekst_artykulu; end; tekst_artykulu=PraceKoncowe(tekst_artykulu); tekst_artykulu=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nil,tab_element); tekst_artykulu=INNEPRE(tekst_artykulu); tekst_artykulu=szablonowe_modul.OdkodowanieZakodowanychNormKodowychNieschematycznychRzeczy(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); return tekst_artykulu; end; local function InicjujTabela() if(not __FUNKCJA3)then if(not __FUNKCJA4)then for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_szablonowe_mediawiki)do tablica_analizy_obiektow_strony_dany_modul[obiekt]={}; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do tablica_analizy_obiektow_strony_dany_modul[obiekt]={}; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_atrybutowe_znacznikowe_mediawiki)do tablica_analizy_obiektow_strony_dany_modul[obiekt]={}; end; else tablica_analizy_obiektow_strony_dany_modul=__FUNKCJA4(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; else if(__FUNKCJA4)then tablica_analizy_obiektow_strony_dany_modul=__FUNKCJA4(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; end; end; local function UstawieniaPoczatkoweObiektowSzablonow() if(not tablica_analizy_obiektow_strony_dany_modul)then tablica_analizy_obiektow_strony_dany_modul=szablonowe_modul.TablicaBazyKodowaniaArtykularnegoParsowaniaTekstu(self,nazwa_modulu); local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(tablica_analizy_obiektow_strony_dany_modul))then numer_szablonu=self.numer_szablonu; else InicjujNumeryPoczatkoweObiektowSzablonow(); self.numer_szablonu=numer_szablonu; InicjujTabela(); end; else InicjujNumeryPoczatkoweObiektowSzablonow(); InicjujTabela(); end; end; ---- UstawieniaPoczatkoweObiektowSzablonow(); --- local PreProcesorSTARE=function(tekst_artykulu,wzor_kodu,czy_tak) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"("..wzor_kodu..")",function(szablon,obiekt,kod) if(czy_tak)then local tablica_szablon_obiekt=tablica_analizy_obiektow_strony_dany_modul and tablica_analizy_obiektow_strony_dany_modul[obiekt] or nil; local kod=tablica_szablon_obiekt and tonumber(kod) or nil; if(kod)then local szablon_wynik=tablica_szablon_obiekt and tablica_szablon_obiekt[kod] or nil; if(not szablon_wynik)then return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE"); else local wynik=__FUNKCJA2(szablon_wynik,obiekt,kod,tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu); return wynik; end; else return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE"); end; else return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE"); end; end); return tekst_artykulu; end; tekst_artykulu=PreProcesorSTARE(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaTekstu(),true); tekst_artykulu=PreProcesorSTARE(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),false); tekst_artykulu=AnalizaObiektowSzablonowegoTekstu(tekst_artykulu); return tekst_artykulu; end; return p; r77u5vkca1b6sk0a4woaw27vaamc1qn 558948 558947 2026-10-08T18:14:59Z Persino 2851 558948 Scribunto text/plain local p={}; function p.TranslatorProstyTekstDoEncodeWikiTekst(tekst) local szablonowe_modul=require("Module:Szablonowe"); tekst=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(),function(obiekt,kod) return szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(obiekt,kod); end); return tekst; end; function p.TranslatorOdwrotnyEncodeWikiTekstDoTekst(tekst) local szablonowe_modul=require("Module:Szablonowe"); tekst=mw.ustring.gsub(tekst,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod) return szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end); return tekst; end; function p.AtrybutyZnacznika(atrybuty,nazwa_modulu,tab_element,tab_atrybuty) local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); local html_modul=require("Module:Html"); local tab_specjalne; if(tab_element)then atrybuty=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(atrybuty,nazwa_modulu,tab_element,function(szablon,obiekt,kod) if(obiekt=="UCIECZKI")then return szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(obiekt,kod); end; return szablon; end); else tab_specjalne={};local ile=1; atrybuty=mw.ustring.gsub(atrybuty,"(\\[\"'])",function(wyraz_specjalny) local wyraz=szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu("UCIECZKI",ile); tab_specjalne[wyraz]=wyraz_specjalny; ile=ile+1; return wyraz; end); end; atrybuty=" "..atrybuty.." "; local tab_atrybuty=tab_atrybuty or {}; local __metatable=getmetatable(tab_atrybuty); local __tab_atrybuty=__metatable and {} or nil; local __start=1; while(true)do local start,koniec,szablon,name,_,value,_=mw.ustring.match(atrybuty,"(%s+(%a+)%s*=%s*([\"'])(.-)(%3)%s+)",__start); if((not szablon)or(not name)or(not value))then break;end; __start=koniec; local tekst=szablonowe_modul.ZnacznikoweTrueFalseSzeregZnakowy(html_modul.TekstoweKodyHtmlZnacznikoweTypowoTagoweParametroweZamienianiaNaZnak(value)); if(__metatable)then table.insert(__tab_atrybuty,{name,tekst,start,}); else tab_atrybuty[name]=tekst; end; end; __start=1; while(true)do local start,koniec,szablon,name,value=mw.ustring.match(atrybuty,"(%s+(%a+)%s*=%s*([%a%d]+)%s+)",__start); if((not szablon)or(not name)or(not value))then break;end; __start=koniec; local tekst=szablonowe_modul.ZnacznikoweTrueFalseSzeregZnakowy(value); if(__metatable)then table.insert(__tab_atrybuty,{name,tekst,start,}); else tab_atrybuty[name]=tekst; end; end; __start=1; while(true)do local start,koniec,szablon,name=mw.ustring.match(atrybuty,"(%s+(%a+)%s+)",__start); if(not name)then break;end; __start=koniec; if(__metatable)then table.insert(__tab_atrybuty,{name,true,start,}); else tab_atrybuty[name]=tekst; end; end; if(__metatable)then table.sort(__tab_atrybuty,function(a,b) return (a[3]<b[3]); end) ; for name,tab_value in ipairs(__tab_atrybuty)do tab_atrybuty[tab_value[1]]=tab_value[2]; end; end; local parametry_modul=require("Module:Parametry"); for name,value in pairs(tab_atrybuty) do if(not parametry_modul.TypeBoolean(value))then local value;local ile; if(tab_element)then value,ile=mw.ustring.gsub(value,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu("UCIECZKI"),function(obiekt,kod) kod=tonumber(kod) or nil; local szablon=(tab_element[obiekt] or {})[kod]; return szablon; end); else value,ile=mw.ustring.gsub(value,"("..szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu("UCIECZKI")..")",function(wyraz) local wynik=tab_specjalne[wyraz]; return wynik; end); end; if(ile>0)then tab_atrybuty[name]=value; end; end; end; return tab_atrybuty; end; function p.UstawianieMetatabelki(tab_co,obiekt,__FUNKCJA_PARAMETRY) local __metatablica=getmetatable(tab_co); local czy_ustawiona_metatabelka=__metatablica and true or false; if(not __metatablica)then __metatablica={}; p.MetaTabelkaSzablonowe(__metatablica); setmetatable(tab_co,__metatablica); end; if((__FUNKCJA_PARAMETRY)and(not czy_ustawiona_metatabelka))then __metatablica.UstawFunkcjaDaneParametry(__FUNKCJA_PARAMETRY,obiekt); end; local tablica_co=__metatablica.tablica(); return tablica_co; end; function p.KodowanieAtrybutoweZnacznikowe(tekst_artykulu,nazwa_modulu,tab_element,numer_szablonu,__FUNKCJA_PARAMETRY) local szablonowe_modul=require("Module:Szablonowe"); local function ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon,nazwa,czy_tak) nazwa=nazwa or "ATRYBUTY"; local tab_nazwa;local ile; if(numer_szablonu)then tab_nazwa=p.UstawianieMetatabelki(tab_element[nazwa],nazwa,__FUNKCJA_PARAMETRY); tab_nazwa[numer_szablonu[nazwa]]={szablon,false,}; ile=numer_szablonu[nazwa]; numer_szablonu[nazwa]=numer_szablonu[nazwa]+1; else if(not tab_element[nazwa])then tab_element[nazwa]={}; end; tab_nazwa=tab_element[nazwa]; tab_nazwa[#tab_nazwa+1]=szablon; ile=#tab_nazwa; end; if(not czy_tak)then local szablon_kod=szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa,ile); return szablon_kod; else local szablon_kod=szablonowe_modul.NormaKoduZakodowanegoEncodeWikiTekstu(nazwa,ile); return szablon_kod; end; end; local function ZNAKI_UCIECZKI(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"(([\\]*)(\\[\"']))",function(szablon,przed,po) local ile=#przed; if(math.fmod(ile,2)==0)then szablon=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon,"UCIECZKI",true); return szablon; end; return nil; end); return tekst_artykulu; end; local function ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow) local _, ile=mw.ustring.gsub(szablon2,"("..cudzyslow..")",function(s)return nil;end); if(math.fmod(ile,2)==0)then szablon2=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon2,nil,true); return szablon1..szablon2..szablon3,true; else szablon2=mw.ustring.gsub(szablon2,"("..cudzyslow..".*"..cudzyslow..")(.-"..cudzyslow.."[^"..cudzyslow.."]*)$",function(__szablon1,__szablon2) __szablon1=ROZWAZANIA_SZABLONOWE_ATRYBUTY(__szablon1,nil,true); return __szablon1..__szablon2; end); szablon3=ROZWAZANIA_SZABLONOWE_ATRYBUTY(szablon3,"KOŃCOWE",true); return szablon1..szablon2..szablon3,false; end; end; tekst_artykulu=ZNAKI_UCIECZKI(tekst_artykulu); local KodowaniaZnakoweAtrybutoweNieucieczkowe=function(tekst_artykulu,wzor) repeat local ile_naprawy_znacznikow=nil; local ile_naprawy_znacznikow_odejmnoc=0; tekst_artykulu,ile_naprawy_znacznikow=mw.ustring.gsub(tekst_artykulu,wzor,function(szablon1,szablon2,cudzyslow,szablon3) local szablon,tak=ATRYBUTY(szablon1,szablon2,szablon3,cudzyslow); if(tak)then ile_naprawy_znacznikow_odejmnoc=ile_naprawy_znacznikow_odejmnoc+1;end; return szablon; end); ile_naprawy_znacznikow=ile_naprawy_znacznikow-ile_naprawy_znacznikow_odejmnoc; until(ile_naprawy_znacznikow==0); return tekst_artykulu; end; tekst_artykulu=KodowaniaZnakoweAtrybutoweNieucieczkowe(tekst_artykulu,"(</?[%a%d]+%s+)([^<>]-([\"']).-%3[^<>]-)(/?>)"); local PodmienianieSzablonoweEncodeWikiTestuNaTekstu=function(obiekt,kod,ile) kod=tonumber(kod) or nil; local szablon=(tab_element[obiekt] or {})[kod]; if(not szablon)then return nil;end; local szablon_kodowy=szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); ile=ile+1; return szablon_kodowy,ile; end; tekst_artykulu=mw.ustring.gsub(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod) if(obiekt~="UCIECZKI")then local szablon_kodowy,ile=PodmienianieSzablonoweEncodeWikiTestuNaTekstu(obiekt,kod,0); if(not szablon_kodowy)then return nil;end; return szablon_kodowy; end; return nil; end); tekst_artykulu=szablonowe_modul:ModyfikowanieKodowoSzablonoweZakodowanegoTekstu(tekst_artykulu,nazwa_modulu,tab_element, function(szablon,obiekt,kod,poziom_iteracji,szablon_rodzica,obiekt_rodzica,kod_rodzica,poziom_iteracji_rodzica) local ile=0; local szablon=mw.ustring.gsub(szablon,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),function(obiekt,kod) if(obiekt~="UCIECZKI")then local szablon_kodowy; szablon_kodowy,ile=PodmienianieSzablonoweEncodeWikiTestuNaTekstu(obiekt,kod,ile); if(not szablon_kodowy)then return nil;end; return szablon_kodowy; end; return nil; end); if(ile==0)then return nil;end; return true,szablon,obiekt,kod; end); tekst_artykulu=szablonowe_modul:KompletowanieSzablonoweZakodowanegoTekstu(tekst_artykulu,nazwa_modulu,tab_element,function(szablon,obiekt,kod) if(obiekt=="KOŃCOWE")then return szablon; end; return nil,true; end); return tekst_artykulu,tab_element; end; function p.MetaTabelkaSzablonowe(__metatablica) local tablica={};local __FUNKCJA; __metatablica.UstawTablica=function(tablica_inna) return function() return tablica_inna or tablica; end; end; __metatablica.UstawFunkcjaDaneParametry=function(__FUNKCJA_start,obiekt) __FUNKCJA=__FUNKCJA_start(obiekt); end; local fun_tablica=__metatablica.UstawTablica(tablica); __metatablica.tablica=function() return fun_tablica(); end; __metatablica.__len=function(t) return #fun_tablica(); end; __metatablica.__index=function(t,klucz) local tab=fun_tablica()[klucz]; if(tab==nil)then return nil;end; return tab[1]; end; __metatablica.__newindex=function(t,klucz,wartosc) if(wartosc~=nil)then local wartosc_tablicy=fun_tablica()[klucz]; if(wartosc_tablicy~=nil)then wartosc_tablicy[1]=wartosc; wartosc_tablicy[2]=false; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,wartosc_tablicy,false);end; else local tab={wartosc,true,}; fun_tablica()[klucz]=tab; if(__FUNKCJA)then __FUNKCJA(fun_tablica(),klucz,tab,true);end; end; else fun_tablica()[klucz]=nil; end; end; local function iter_pairs(tablica,klucz) klucz=next(tablica,klucz); local tab = tablica[klucz]; if tab then return klucz, tab[1]; end end; __metatablica.__pairs=function(t) return iter_pairs,fun_tablica(),nil; end; local function iter_ipairs(a,i) i=i+1; local v = a[i]; if v then return i, v; end end; __metatablica.__ipairs=function(t) return iter_ipairs,fun_tablica(),0; end; __metatablica.KopiujMetaTabela=function(value,funkcja,funkcja2) local tabelka_metatable=__metatablica.tablica(); local __metatablica2={}; p.MetaTabelkaSzablonowe(__metatablica2); local value2={}; local iteratorFun=function(value) local klucz=nil; return function() klucz=next(value,klucz); return klucz; end; end; local iterator=iteratorFun(value); for klucz in iterator do rawset(value2,klucz,rawget(value,klucz)); end; setmetatable(value2,__metatablica2); local tabelka_metatable2=__metatablica2.tablica(); funkcja2(tabelka_metatable,tabelka_metatable2); funkcja(value2,false); end; end; function p.KodowanieSzablonowegoTekstuZObiektamiWikikodu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,__FUNKCJA,__FUNKCJA2,__FUNKCJA3,__FUNKCJA4,__FUNKCJA_poczatek,__FUNKCJA_koniec,__FUNCTION_niedokonczone,__FUNCTION_INCLUDE,__FUNKCJA_PARAMETRY) local numer_szablonu; local strony_modul=require("Module:Strony"); local szeregi_modul=require("Module:Szeregi"); local szablonowe_dane_modul=mw.loadData("Module:Szablonowe/dane"); local szablonowe_modul=require("Module:Szablonowe"); local specjalne_modul=require("Module:Specjalne"); local tab_wiki_znacznik=szablonowe_dane_modul.tablica_wiki_znaczniki; local tablica_znacznikowa_preprocesora_szablonowego=szablonowe_dane_modul.tablica_znacznikowa_preprocesora_szablonowego; local function InicjujNumeryPoczatkoweObiektowSzablonow() if(not __FUNKCJA3)then numer_szablonu={}; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_szablonowe_mediawiki)do numer_szablonu[obiekt]=1; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do numer_szablonu[obiekt]=1; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_atrybutowe_znacznikowe_mediawiki)do numer_szablonu[obiekt]=1; end; else numer_szablonu=__FUNKCJA3(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; end; local PREWSTAWIAJACA=nil;local NiedokonczoneElementyWikikodu=nil;local czy_wynik=true; local function ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,co) if(__FUNKCJA2)then local wynik=__FUNKCJA2(szablon,co,numer_szablonu[co or "SZABLON"],tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu); if(wynik)then numer_szablonu[co or "SZABLON"]=numer_szablonu[co or "SZABLON"]+1; wynik=(czy_wynik and PREWSTAWIAJACA) and PREWSTAWIAJACA(wynik) or wynik; return wynik,false; end; end; if(__FUNKCJA)then szablon=__FUNKCJA(szablon,co,numer_szablonu[co or "SZABLON"]) or szablon; end; local kod=szablonowe_modul.NormaKoduKodowaniaTekstu(co,numer_szablonu[co or "SZABLON"]); --- local tab_co=tablica_analizy_obiektow_strony_dany_modul[co or "SZABLON"]; local obiekt=co or "SZABLON"; local tablica_co=p.UstawianieMetatabelki(tab_co,obiekt,__FUNKCJA_PARAMETRY); tablica_co[numer_szablonu[obiekt]]={szablon,false,}; --- numer_szablonu[obiekt]=numer_szablonu[obiekt]+1; return kod,true; end; local function AnalizaObiektowSzablonowegoTekstu(tekst_artykulu) local ile_znacznik_niedomykajacy_0;local ile_znacznik_niedomykajacy_1;local ile_znacznik_niedomykajacy_2; local techniczne_modul=require("Module:Techniczne"); local tab_licznik_poczatek={}; local tab_licznik_koniec={}; local tab_element={}; local ObiektFun=function(nazwa) return szablonowe_dane_modul.tablica_znaczniki_typowo_mechanizmu_mediawiki[nazwa] or (__FUNCTION_INCLUDE and __FUNCTION_INCLUDE(nazwa) and tablica_znacznikowa_preprocesora_szablonowego[nazwa] and "INCLUDE" or nil) or (tab_wiki_znacznik[nazwa] and "ZNACZNIK" or nil); end; local INCLUDE=function(tekst_artykulu) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<[^<>]") end; local INNEPRE=function(tekst_artykulu,czy_poczt,czy_szablon) local function INNEPREROZ(poczatek,koniec) repeat local ile;local ile2=0; tekst_artykulu,ile=mw.ustring.gsub(tekst_artykulu,(poczatek and "\n" or "^").."([^%S\n]+)([^\n]*)"..(koniec and "\n" or "$"),function(spacje,kod) if((not czy_szablon)or((czy_szablon)and((not mw.ustring.match(kod,"[|=]"))and((koniec)and true or (not mw.ustring.match(kod,"^[^%S\n]*$"))))))then kod=NiedokonczoneElementyWikikodu(kod); local szablon=spacje..kod; return (poczatek and "\n" or "")..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"INNEPRE")..(koniec and "\n" or ""); else ile2=ile2+1; end; end); ile=ile-ile2; until (ile==0); end; if(not czy_poczt)then INNEPREROZ(false,true); INNEPREROZ(false,false); end; INNEPREROZ(true,true); INNEPREROZ(true,false); return tekst_artykulu; end; local tab_znaczniki={}; local tab_numerki={}; local function PreprocesorSzablonow(tekst_artykulu) tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul=p.KodowanieAtrybutoweZnacznikowe(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu,__FUNKCJA_PARAMETRY); local function ZnacznikiWiki(tekst_artykulu,czy_zawsze,czy_inne) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)([%a%d]+)(%s*)([^<>]-)(%s*)>",function(koniec,nazwa,odstepy_przed,tekst,odstepy_po) ----- if((odstepy_przed=="")and((tekst~="")and(tekst~="/")))then return;end; if(koniec=="")then local nazwa=mw.ustring.lower(nazwa); table.insert(tab_znaczniki,nazwa); local koniec_samozamykajacy=mw.ustring.match(tekst,"^(.-)%s*(/?)%s*$"); if(koniec_samozamykajacy=="/")then tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1; end; tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1; if(not tab_numerki[nazwa])then tab_numerki[nazwa]={};end; table.insert(tab_numerki[nazwa],tab_licznik_poczatek[nazwa]); local licznik=tab_licznik_poczatek[nazwa]; local szablon=nazwa..odstepy_przed..tekst..odstepy_po; if(not tab_element)then tab_element={};end; local typ=ObiektFun(nazwa); if(not typ)then return "&lt;"..koniec..nazwa..odstepy_przed..tekst..odstepy_po.."&gt;"; end; --- local czy_znacznik=(typ=="ZNACZNIK"); local czy_include=(typ=="INCLUDE"); local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and ((not czy_include)and "innebegin" or "incbegin") or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and "begin" or nil); if(not jak)then return;end; ---- if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end; tab_element[nazwa..jak][licznik]=szablon; return "<"..szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">"; else local nazwa=mw.ustring.lower(nazwa); tab_licznik_koniec[nazwa]=(tab_licznik_koniec[nazwa] or 0)+1; local licznik; if(#tab_znaczniki>0)then if(tab_znaczniki[#tab_znaczniki]~=nazwa)then local koniec=0; for i=#tab_znaczniki-1,1,-1 do if(tab_znaczniki[i]==nazwa)then koniec=i; break; end; end; if(koniec>0)then licznik=tab_numerki[nazwa][#tab_numerki[nazwa]]; for i=koniec+1,#tab_znaczniki,1 do tab_licznik_koniec[tab_znaczniki[i]]=(tab_licznik_koniec[tab_znaczniki[i]] or 0)+1; end; for i=koniec,#tab_znaczniki,1 do table.remove(tab_numerki[tab_znaczniki[i]]); end; for i=#tab_znaczniki,koniec,-1 do table.remove(tab_znaczniki); end; else tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1; licznik=tab_licznik_poczatek[nazwa]; end; else licznik=tab_numerki[nazwa][#tab_numerki[nazwa]]; table.remove(tab_numerki[nazwa]); table.remove(tab_znaczniki); end; else tab_licznik_poczatek[nazwa]=(tab_licznik_poczatek[nazwa] or 0)+1; licznik=tab_licznik_koniec[nazwa]; end; local szablon=nazwa..odstepy_przed..tekst..odstepy_po; if(not tab_element)then tab_element={};end; local typ=ObiektFun(nazwa); if(not typ)then return "&lt;"..koniec..nazwa..odstepy_przed..tekst..odstepy_po.."&gt;"; end; --- local czy_znacznik=(typ=="ZNACZNIK"); local czy_include=(typ=="INCLUDE"); local jak=(((czy_zawsze)or(czy_inne))and(not czy_znacznik))and ((not czy_include)and "inneend" or "incend") or (((czy_zawsze)or(not czy_inne))and(czy_znacznik)and "end" or nil); if(not jak)then return;end; --- if(not tab_element[nazwa..jak])then tab_element[nazwa..jak]={};end; tab_element[nazwa..jak][licznik]=szablon; return "</"..szablonowe_modul.NormaKoduKodowaniaTekstu(nazwa..jak,licznik)..">"; end; end); return tekst_artykulu; end; tekst_artykulu=ZnacznikiWiki(tekst_artykulu,false,true); local function ZnacznikiWikiLinia(tekst_artykulu,wzor1,wzor2) tekst_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_artykulu, function(linia) local a;local b; a=mw.ustring.match(linia,wzor1); if(not a)then a,b=mw.ustring.match(linia,wzor2); if(not a)then return nil;end; end; if(b)then b=ZnacznikiWiki(b,false,false); return a..b; else a=ZnacznikiWiki(a,false,false); return a; end; end); return tekst_artykulu; end; ---- tekst_artykulu=ZnacznikiWikiLinia(tekst_artykulu,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$","^([%*#;:]+)([^\n]+)$"); tekst_artykulu=ZnacznikiWiki(tekst_artykulu,false,false); ---- local function AnalizujDomykajace(tekst_artykulu,jak,co) local tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"<(/?)("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak..co,"(%d+)")..")>",function(poczatek,nazwa_przed_nieodkodowane,obiekt,kod) local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element); local nazwa,odstepy,atrybuty,koniec=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*(/?)%s*$"); nazwa=mw.ustring.lower(nazwa); if((koniec=="/")or(nazwa=="br")or(nazwa=="hr")or(nazwa=="templatestyles"))then local szablon="<"..poczatek..nazwa_przed..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,ObiektFun(nazwa)); end; return nil; end); return tekst_artykulu; end; tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne","begin"); tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"","begin"); tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"inne","end"); tekst_artykulu=AnalizujDomykajace(tekst_artykulu,"","end"); ---- return tekst_artykulu; end; tekst_artykulu=PreprocesorSzablonow(tekst_artykulu); local function Kompilacja(tekst_artykulu) ---- local ZamianaLINKWNaLINKZ=function(zawartosc,dalej) local czy_url=strony_modul.SprawdzanieURL(zawartosc); if(czy_url)then local szablon="["..zawartosc.."]"; return "["..ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKZ").."]"..dalej; else if((dalej)and(dalej~=""))then if(specjalne_modul["CzyAdresLinkuWewnętrznego"]{adres=zawartosc,})then local szablon; if(mw.ustring.match(zawartosc,"|"))then szablon="[["..zawartosc..dalej.."]]"; else local nazwa=mw.ustring.gsub(zawartosc,"^[%s_]*:[%s_]*",""); szablon="[["..zawartosc.."|"..nazwa..dalej.."]]"; end; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW"); end; end; local szablon="[["..zawartosc.."]]"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"LINKW")..dalej; end; end; local PracePrzygotowywujace; NiedokonczoneElementyWikikodu=function(tekst_artykulu,czy_main) local function DomykajaceIOdtwierajace(tekst_artykulu,jak,tablica_znacznikow) repeat local ile_znacznik_niedomykajacy; local ile_znacznik_niedomykajacy_ujemny=0; tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."begin","(%d+)")..")>(.*)$",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc) local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element); if(tablica_znacznikow)then if(not tablica_znacznikow[nazwa_przed])then ile_znacznik_niedomykajacy_ujemny=ile_znacznik_niedomykajacy_ujemny+1; return nil; end; end; zawartosc=INNEPRE(zawartosc,true); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*$"); local szablon="<"..nazwa_przed..">"..zawartosc..((mw.ustring.match(zawartosc,"\n=[^\n]*[^%s=][^\n]*=[^%S\n]*$") or mw.ustring.match(zawartosc,"\n[%*#:;][^\n]*$") ) and "\n" or "").."</"..nazwa..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK"); end); ile_znacznik_niedomykajacy=ile_znacznik_niedomykajacy-ile_znacznik_niedomykajacy_ujemny; until (ile_znacznik_niedomykajacy==0); repeat local ile_znacznik_nieotwierajacy; local ile_znacznik_nieotwierajacy_ujemny=0; tekst_artykulu,ile_znacznik_nieotwierajacy=mw.ustring.gsub(tekst_artykulu,"^(.*)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."end","(%d+)")..")>",function(zawartosc,nazwa_po_nieodkodowane,obiekt,kod) local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element); if(tablica_znacznikow)then if(not tablica_znacznikow[nazwa_po])then ile_znacznik_nieotwierajacy_ujemny=ile_znacznik_nieotwierajacy_ujemny+1; return nil; end; end; zawartosc=INNEPRE(zawartosc); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_po,"^([%a%d]+)(%s*)(.-)%s*$"); local szablon="<"..nazwa..">"..((mw.ustring.match(zawartosc,"^=[^\n]*[^%s=][^\n]*=[^%S\n]*\n") or mw.ustring.match(zawartosc,"^[%*#:;][^\n]*\n") ) and "\n" or "")..zawartosc.."</"..nazwa_po..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"ZNACZNIK"); end); ile_znacznik_nieotwierajacy=ile_znacznik_nieotwierajacy-ile_znacznik_nieotwierajacy_ujemny; until (ile_znacznik_nieotwierajacy==0); return tekst_artykulu; end; if(__FUNCTION_niedokonczone)then local wynik,gdy_nie,tablica_znacznikow,czy_koniec,__FUNCTION=__FUNCTION_niedokonczone(tekst_artykulu,tab_element); if(gdy_nie)then if(czy_koniec)then return wynik or tekst_artykulu;end; tekst_artykulu=wynik or tekst_artykulu; tekst_artykulu=__FUNCTION and __FUNCTION(tekst_artykulu) or tekst_artykulu; tekst_artykulu=tablica_znacznikow and DomykajaceIOdtwierajace(tekst_artykulu,"",tablica_znacznikow) or tekst_artykulu; return tekst_artykulu; else tekst_artykulu=wynik or tekst_artykulu; end; end; local function DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu) repeat local ile_wikitabela_1; tekst_artykulu,ile_wikitabela_1=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"({|)(.-)$", function(szereg,numer,licznik_wzor,numer_a,numer_b,poczatek,szablon) return mw.ustring.match(szablon,"\n%{%|"),((licznik_wzor==1)and 2 or 3); end, function(licznik_wzor,poczatek,szablon) szablon=INNEPRE(szablon,true); szablon=NiedokonczoneElementyWikikodu(szablon); szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element); return (((czy_main)and(licznik_wzor==1)) and "" or "\n")..ZamienObiektSzablonuKodem(self,poczatek..szablon.."\n|}",tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA"); end, function(wzor,licznik_wzor,czy) if(czy_main)then if(licznik_wzor==1)then return "^"..wzor,true;end; return "\n"..wzor,false; else return "\n"..wzor,false; end; end); until (ile_wikitabela_1==0); repeat local ile_wikitabela_2; tekst_artykulu,ile_wikitabela_2=mw.ustring.gsub(tekst_artykulu,"^(.-)(\n|})",function(szablon,koniec) szablon=INNEPRE(szablon); szablon=NiedokonczoneElementyWikikodu(szablon); szablon=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,szablon,nil,tab_element); return ZamienObiektSzablonuKodem(self,"\n{|\n"..szablon..koniec,tablica_analizy_obiektow_strony_dany_modul,"WIKITABELA"); end); until (ile_wikitabela_2==0); return tekst_artykulu; end; local function DomykajaceIOdtwierajaceLinia(tekst_artykulu,wzor_dodatnie,wzor_ujemne) tekst_artykulu=szeregi_modul.ZamianaZnakowaLinii(tekst_artykulu,function(linia) local dodatnie=nil; local a,b,c=mw.ustring.match(linia,wzor_dodatnie); if((not a)or(not b)or(not c))then a,b=mw.ustring.match(linia,wzor_ujemne); if((not a)or(not b))then return nil;end; c=nil; else dodatnie=true; end; if(dodatnie)then b=DomykajaceIOdtwierajace(b,""); return a..b..c; else b=DomykajaceIOdtwierajace(b,""); return a..b; end; end); return tekst_artykulu; end; --- tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne"); ----- local wzor_dodatnie="^(=+[^%S\n]*)([^\n]-[^%s=][^\n]-)([^%S\n]*=+[^%S\n]*)$"; local wzor_ujemne="^([%*#;:]+[^%S\n]*)([^\n]+)$"; tekst_artykulu=DomykajaceIOdtwierajaceLinia(tekst_artykulu,wzor_dodatnie,wzor_ujemne); ----- --- --tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,"inne"); tekst_artykulu=DomykajaceIOdtwierajace(tekst_artykulu,""); tekst_artykulu=DomykajaceIOdtwierajaceWikiTabelka(tekst_artykulu); return tekst_artykulu; end; local function ZNACZNIKI(tekst_artykulu,jak) local ile_odjac_znacznik_niedomykajacy=0; local tekst_artykulu,ile_znacznik_niedomykajacy=mw.ustring.gsub(tekst_artykulu,"<("..szablonowe_modul.NormaWzoruKodowaniaTekstu("([%a%d]+)"..jak.."begin","(%d+)")..")>(.-)</("..szablonowe_modul.NormaWzoruKodowaniaTekstu("(%2)"..jak.."end","(%3)")..")>",function(nazwa_przed_nieodkodowane,obiekt,kod,zawartosc,nazwa_po_nieodkodowane,obiekt2,kod2) local nazwa_przed=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_przed_nieodkodowane,nil,tab_element); local nazwa,odstepy,atrybuty=mw.ustring.match(nazwa_przed,"^([%a%d]+)(%s*)(.-)%s*$"); nazwa=mw.ustring.lower(nazwa); local function TenZnacznik() local nazwa_po=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,nazwa_po_nieodkodowane,nil,tab_element); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); if(jak=="")then zawartosc=INNEPRE(zawartosc,true); end; local szablon="<"..nazwa_przed..">"..zawartosc.."</"..nazwa_po..">"; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,ObiektFun(nazwa)); end; local function InneZnacznik() ile_odjac_znacznik_niedomykajacy=ile_odjac_znacznik_niedomykajacy+1; local szablon="<"..nazwa_przed_nieodkodowane..">"..zawartosc.."</"..nazwa_po_nieodkodowane..">"; return szablon; end; if(not mw.ustring.match(atrybuty,"^%s*$"))then if(odstepy~="")then if((jak~="")and(jak~="inc"))then return TenZnacznik(); end; else return InneZnacznik(); end; else if((jak~="")and(jak~="inc"))then return TenZnacznik(); end; end; ---- local ile_zastapione;local ile_pominiete; zawartosc,ile_zastapione,ile_pominiete=ZNACZNIKI(zawartosc,jak); zawartosc=PracePrzygotowywujace(zawartosc); zawartosc=INNEPRE(zawartosc,true); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); return TenZnacznik(); end); return tekst_artykulu,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy; end; ---- PracePrzygotowywujace=function(tekst_artykulu,czy_main) local ile_linkw;local ile_linkz;local ile_var;local ile_template;local ile_wikitabela; local function Szablon(zawartosc,przed,po,obiekt,czy_linkw,dalej) local ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy; zawartosc,ile_znacznik_niedomykajacy,ile_odjac_znacznik_niedomykajacy=ZNACZNIKI(zawartosc,""); zawartosc=PracePrzygotowywujace(zawartosc); zawartosc=INNEPRE(zawartosc,true,(obiekt=="SZABLON")); zawartosc=NiedokonczoneElementyWikikodu(zawartosc); zawartosc=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,zawartosc,nil,tab_element); if(czy_linkw)then return ZamianaLINKWNaLINKZ(zawartosc,dalej); else local szablon=przed..zawartosc..po; return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,obiekt); end; end; repeat repeat tekst_artykulu,ile_linkw=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"%[%[(.-%[?)%]%](%]?)(%l*)", function(szereg,numer,numer_a,numer_b,szablon,dodatkowe,dalej) local czy_dalej_kwadratowe=mw.ustring.match(szablon,"%[%["); if(czy_dalej_kwadratowe)then return czy_dalej_kwadratowe,2; else return mw.ustring.match(szablon,"^%["),3; end; end, function(szablon,dodatkowe,dalej) if(dodatkowe~="")then local czy_linkz=mw.ustring.match(szablon,"%[[^%[%]]*$"); if(czy_linkz)then szablon=szablon..dodatkowe; return Szablon(szablon,"[[","]]","LINKW",true,dalej); else return Szablon(szablon,"[[","]]","LINKW",true,"")..dodatkowe..dalej; end; else return Szablon(szablon,"[[","]]","LINKW",true,dalej); end; end); until (ile_linkw==0); tekst_artykulu,ile_linkz=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"%[(.-)%]", function(szereg,numer,numer_a,numer_b,szablon) return mw.ustring.match(szablon,"%["),1; end, function(szablon) return Szablon(szablon,"[","]","LINKZ"); end); repeat tekst_artykulu,ile_var=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{{{(.-)}}}", function(szereg,numer,numer_a,numer_b,szablon) local czy_dalej_klamerka=mw.ustring.match(szablon,"%{%{%{"); if(czy_dalej_klamerka)then return czy_dalej_klamerka,3; else return mw.ustring.match(szablon,"^%{"),4; end; end, function(szablon) return Szablon(szablon,"{{{","}}}","ZMIENNA"); end); until (ile_var==0); tekst_artykulu,ile_template=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{{(.-)}}", function(szereg,numer,numer_a,numer_b,szablon) local czy_dalej_klamerka=mw.ustring.match(szablon,"%{%{"); if(czy_dalej_klamerka)then return czy_dalej_klamerka,2; else return mw.ustring.match(szablon,"^%{"),3; end; end, function(szablon) return Szablon(szablon,"{{","}}","SZABLON"); end); tekst_artykulu,ile_wikitabela=szeregi_modul.ZamianaZnakowaSzeregu(tekst_artykulu,"{|(.-)\n|}", function(szereg,numer,licznik_wzor,numer_a,numer_b,szablon) return mw.ustring.match(szablon,"\n%{%|"),(czy_main and ((licznik_wzor==1) and 2 or 3) or 3); end, function(licznik_wzor,szablon) if((czy_main)and(licznik_wzor==1))then return Szablon(szablon,"{|","\n|}","WIKITABELA"); else return "\n"..Szablon(szablon,"{|","\n|}","WIKITABELA"); end; end, function(wzor,numer_begin,czy) if(czy_main)then if(numer_begin==1)then return "^"..wzor,true;end; return "\n"..wzor,false; else return "\n"..wzor,false; end; end); until ((ile_linkw==0)and(ile_linkz==0)and(ile_var==0)and(ile_template==0)and(ile_wikitabela==0)); return tekst_artykulu; end; ---- local ile_odjac_znacznik_niedomykajacy_0; if(__FUNCTION_INCLUDE)then tekst_artykulu,ile_znacznik_niedomykajacy_0,ile_odjac_znacznik_niedomykajacy_0=ZNACZNIKI(tekst_artykulu,"inc"); ile_znacznik_niedomykajacy_0=ile_znacznik_niedomykajacy_0-ile_odjac_znacznik_niedomykajacy_0; ---- tekst_artykulu=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul,function(szablon,obiekt,kod,poziom_iteracji,tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul) if(obiekt=="INCLUDE")then local nazwa,zawartosc,tab=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); if(__FUNCTION_INCLUDE(nazwa))then local function inc(zawartosc) return (mw.ustring.match(tekst_artykulu,"{{{[^{}|]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."%s*}}}") or mw.ustring.match(tekst_artykulu,"{{.-|.-"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)..".-}}") )and true or false; end; if(nazwa=="noinclude")then if(poziom_iteracji==0)then return (not inc(zawartosc)) and "" or zawartosc; else return zawartosc; end; elseif(nazwa=="includeonly")then if(poziom_iteracji==0)then return (not inc(zawartosc)) and zawartosc or ""; else return ""; end; end; end; end; return nil,true; end); end; ---- local ile_odjac_znacznik_niedomykajacy_1; tekst_artykulu,ile_znacznik_niedomykajacy_1,ile_odjac_znacznik_niedomykajacy_1=ZNACZNIKI(tekst_artykulu,"inne"); ile_znacznik_niedomykajacy_1=ile_znacznik_niedomykajacy_1-ile_odjac_znacznik_niedomykajacy_1; ---- tekst_artykulu=PracePrzygotowywujace(tekst_artykulu,true); ---- local ile_odjac_znacznik_niedomykajacy_2; tekst_artykulu,ile_znacznik_niedomykajacy_2,ile_odjac_znacznik_niedomykajacy_2=ZNACZNIKI(tekst_artykulu,""); return tekst_artykulu; end; PREWSTAWIAJACA=function(tekst_artykulu) czy_wynik=nil; tekst_artykulu=PreprocesorSzablonow(tekst_artykulu); tekst_artykulu=Kompilacja(tekst_artykulu); czy_wynik=true; return tekst_artykulu; end; tekst_artykulu=Kompilacja(tekst_artykulu) local function PoczatekKoniecTekst(tekst_artykulu) local tekst_poczatek=(__FUNKCJA_poczatek and __FUNKCJA_poczatek(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or nil); local tekst_koniec=(__FUNKCJA_koniec and __FUNKCJA_koniec(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul) or nil); if(((tekst_poczatek)and(not mw.ustring.match(tekst_poczatek,"^%s*$")))or((tekst_koniec)and(not mw.ustring.match(tekst_koniec,"^%s*$"))))then tekst_poczatek=tekst_poczatek and PREWSTAWIAJACA(tekst_poczatek) or tekst_poczatek; tekst_koniec=tekst_koniec and PREWSTAWIAJACA(tekst_koniec) or tekst_koniec; tekst_artykulu=(tekst_poczatek or "")..tekst_artykulu..(tekst_koniec or ""); end; return tekst_artykulu; end; tekst_artykulu=PoczatekKoniecTekst(tekst_artykulu); local function PraceKoncowe(tekst_artykulu) tekst_artykulu=NiedokonczoneElementyWikikodu(tekst_artykulu,true); return tekst_artykulu; end; tekst_artykulu=PraceKoncowe(tekst_artykulu); tekst_artykulu=szablonowe_modul.KompletowanieSzablonoweZakodowanegoTekstu(self,tekst_artykulu,nil,tab_element); tekst_artykulu=INNEPRE(tekst_artykulu); tekst_artykulu=szablonowe_modul.OdkodowanieZakodowanychNormKodowychNieschematycznychRzeczy(self,tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); return tekst_artykulu; end; local function InicjujTabela() if(not __FUNKCJA3)then if(not __FUNKCJA4)then for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_szablonowe_mediawiki)do tablica_analizy_obiektow_strony_dany_modul[obiekt]={}; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_kodowa_obiektowa_typowo_mechanizmu_mediawiki)do tablica_analizy_obiektow_strony_dany_modul[obiekt]={}; end; for obiekt,_ in pairs(szablonowe_dane_modul.tablica_podstawowe_elementy_atrybutowe_znacznikowe_mediawiki)do tablica_analizy_obiektow_strony_dany_modul[obiekt]={}; end; else tablica_analizy_obiektow_strony_dany_modul=__FUNKCJA4(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; else if(__FUNKCJA4)then tablica_analizy_obiektow_strony_dany_modul=__FUNKCJA4(tekst_artykulu,nazwa_modulu,tablica_analizy_obiektow_strony_dany_modul); end; end; end; local function UstawieniaPoczatkoweObiektowSzablonow() if(not tablica_analizy_obiektow_strony_dany_modul)then tablica_analizy_obiektow_strony_dany_modul=szablonowe_modul.TablicaBazyKodowaniaArtykularnegoParsowaniaTekstu(self,nazwa_modulu); local parametry_modul=require("Module:Parametry"); if(parametry_modul.CzyTak(tablica_analizy_obiektow_strony_dany_modul))then numer_szablonu=self.numer_szablonu; else InicjujNumeryPoczatkoweObiektowSzablonow(); self.numer_szablonu=numer_szablonu; InicjujTabela(); end; else InicjujNumeryPoczatkoweObiektowSzablonow(); InicjujTabela(); end; end; ---- UstawieniaPoczatkoweObiektowSzablonow(); --- local PreProcesorSTARE=function(tekst_artykulu,wzor_kodu,czy_tak) tekst_artykulu=mw.ustring.gsub(tekst_artykulu,"("..wzor_kodu..")",function(szablon,obiekt,kod) if(czy_tak)then local tablica_szablon_obiekt=tablica_analizy_obiektow_strony_dany_modul and tablica_analizy_obiektow_strony_dany_modul[obiekt] or nil; local kod=tablica_szablon_obiekt and tonumber(kod) or nil; if(kod)then local szablon_wynik=tablica_szablon_obiekt and tablica_szablon_obiekt[kod] or nil; if(not szablon_wynik)then return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE"); else local wynik=__FUNKCJA2(szablon_wynik,obiekt,kod,tekst_artykulu,tablica_analizy_obiektow_strony_dany_modul,numer_szablonu); return wynik; end; else return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE"); end; else return ZamienObiektSzablonuKodem(self,szablon,tablica_analizy_obiektow_strony_dany_modul,"STARE"); end; end); return tekst_artykulu; end; tekst_artykulu=PreProcesorSTARE(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaTekstu(),true); tekst_artykulu=PreProcesorSTARE(tekst_artykulu,szablonowe_modul.NormaWzoruKodowaniaEncodeWikiTekstu(),false); tekst_artykulu=AnalizaObiektowSzablonowegoTekstu(tekst_artykulu); return tekst_artykulu; end; return p; 1woxiitsiace5xng0yfi9eby95ewpso Moduł:StronicowyParser/AnalizaSpisuRzeczy 828 60192 558937 558505 2026-10-08T12:17:34Z Persino 2851 558937 Scribunto text/plain local p={}; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or((b)and(b<=liczba_do)))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) ---- if(nazwa_szablonu=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.SzukajObiektuArtykularnegoWeElemencieTekstowym(tekst,szablon_normy_kodowania_szablonu,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, czy_usun_okladka,czy_glowny_spis_tresci,czy_wszystkie_linki,z_innymi_stronami) local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci); if((czy_element_spisu)and((czy_wszystkie_linki)or(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((z_innymi_stronami)and(numer_rodzaju_artykulu>1)))))then return true; end; end; start=koniec_szablon; else return false; end; end; end; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=jak and liczba_start_rozdzial or liczba_koniec_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return true; end); elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if((nazwa)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,czy_rozdzial_rownaniowy_dodatni,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona; if(czy_rozdzial_rownaniowy_dodatni)then __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu) else __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); end; if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,spis_naglowka_szablon_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu( norma_kodowania_szablonu, false, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,spis_naglowka_znacznik_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu( norma_kodowania_szablonu, false, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_dodatni_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu( wzor_rozdzialu_dodatniego, true, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,spis_naglowka_szablon_poziom); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,spis_naglowka_znacznik_poziom); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_dodatni_poziom); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if((stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local czy_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); if(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; czy_spis=((czy_rozdzial_dwukropkowy)and(not tak))and true or nil; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; czy_spis=czy_rozdzial_dwukropkowy and true or nil; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki) local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); ---- ---- if((czy_element_spisu)and((czy_wszystkie_linki)or((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return true; else local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt_szablon,kod_szablon; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=czy_nieoddzielone or mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and((czy_wszystkie_linki)or((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return true; end; end; else return false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return false; end; end; function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,linia,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local czy_znalezione=p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,false,false); if(czy_znalezione)then return liczba_linki_nierozdzialowe_szablonu,true;end; return liczba_spisowa,false; end; else return liczba_spisowa,false; end; end; end; function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz) local liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; return liczba_start,true; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; return liczba_start,true; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if((not liczba_start_naglowek_przed)or(liczba_start_sugerowane>liczba_start_naglowek_przed))then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if((not liczba_start_naglowek_przed)or(liczba_start_nowa>liczba_start_naglowek_przed))then liczba_start=liczba_start_nowa; end; else liczba_start=liczba_start_sugerowane; end; end; else liczba_start=liczba_start_sugerowane; end; return liczba_start,false; end; function p.PoliczKoniecZakodowanegoTekstuArtykularnego(tekst_rozwiniety_calego_artykulu,liczba_obiekt_koniec,liczba_koniec) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return liczba_koniec; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return liczba_koniec; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; return liczba_koniec; end; end; return liczba_koniec; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if(czy_element_spisu)then return linia; elseif(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and( ( (lista_szablon~="")and( (przerwa_szablon=="") or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<"))) or(not mw.ustring.match(lista_szablon,"^:")) ) ) or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))) )); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); 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); local czy_break; liczba_start,czy_break=p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed,liczba_start_naglowek_przed,czy_znajdz); if(czy_break)then break;end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); local czy_break; liczba_start,czy_break=p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,nil,czy_znajdz); if(czy_break)then break;end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,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); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_znalezione=nil; if(liczba_start<=liczba_obiekt_start)then czy_znalezione=p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,true,true); end; if(czy_znalezione)then liczba_koniec=p.PoliczKoniecZakodowanegoTekstuArtykularnego(tekst_rozwiniety_calego_artykulu,liczba_obiekt_koniec,liczba_koniec); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local czy_znalazles_linki=p.SzukajObiektuArtykularnegoWeElemencieTekstowym(rozdzial,szablon_normy_kodowania_szablonu,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,true,true,true,true); if(czy_znalazles_linki)then liczba_koniec=liczba_rozdzial_koniec;end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,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; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; htyns1511p7aaptv8h36g3j54ui1ovi 558946 558937 2026-10-08T16:59:55Z Persino 2851 558946 Scribunto text/plain local p={}; function p.SzukanieNaPodstawieWzoru(tekst,wzor,liczba_od,liczba_do,czy_od_tylu,jak) if(not czy_od_tylu)then if((liczba_od)and(liczba_do)and(liczba_od>liczba_do))then return;end; local a,b,c,d,e,f,g,h,i,j,k=mw.ustring.find(tekst,wzor,liczba_od); if((a)and(b)and(a>b))then return;end; if((not liczba_do)or((b)and(b<=liczba_do)))then return a,b,c,d,e,f,g,h,i,j,k; end; return nil; else if((liczba_od)and(liczba_do)and(liczba_od<liczba_do))then return;end; local liczba_start=liczba_do or 1; local a,b,c,d,e,f,g,h,i,j,k=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil; while(true)do local a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1=mw.ustring.find(tekst,wzor,liczba_start); if((a1)and(b1)and(a1>b1))then return;end; if((not b1)or((b1)and(b1>liczba_od)))then return a,b,c,d,e,f,g,h,i,j,k; elseif((b1)and(b1==liczba_od))then return a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; end; a,b,c,d,e,f,g,h,i,j,k=a1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1; if(not jak)then if(a1==b1)then liczba_start=b1+1; else liczba_start=b1; end; else liczba_start=b1+1; end; end; end; end; function p.SzukanieNaPodstawieWzoruElementuLinii(tekst,wzor_linia,liczba_od,liczba_do,czy_od_tylu) local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local a1;local a2;local a3;local a4;local a5;local a6;local a7;local a8;local a9; local dlugosc_tekstu_wyszukiwanego=#tekst; if(not czy_od_tylu)then if((not liczba_od)or(liczba_od==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,false); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==1))and((not liczba_do)or(liczba_do==dlugosc_tekstu_wyszukiwanego)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,false); end; end; end; end; else if(liczba_od==dlugosc_tekstu_wyszukiwanego)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"\n"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); if(not liczba_start_rozdzial)then if((not liczba_do)or(liczba_do==1))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*\n",liczba_od,liczba_do,true); end; if(not liczba_start_rozdzial)then if(((not liczba_od)or(liczba_od==dlugosc_tekstu_wyszukiwanego))and((not liczba_do)or(liczba_do==1)))then liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9=p.SzukanieNaPodstawieWzoru(tekst,"^"..wzor_linia.."[^%S\n]*$",liczba_od,liczba_do,true); end; end; end; end; end; return liczba_start_rozdzial,liczba_koniec_rozdzial,a1,a2,a3,a4,a5,a6,a7,a8,a9; end; function p.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local stronicowyparser_potrzebne_modul=require("Module:StronicowyParser/Potrzebne"); local tab_2,numer_rodzaju_artykulu,id,parametry,kom=stronicowyparser_potrzebne_modul.AnalizujLinkSzablonyOrazLinki(szablon,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,obiekt,kod,tab_nazwa_spisow_przekierowaniowych,stronicowyparser_rozdzialy_modul.__FUNKCJA_KOMPLETOWANIA); if(not kom)then local tab=((tab_2 and tab_2[1]) and tab_2 or nil); if(tab)then if(numer_rodzaju_artykulu==1)then local artykul=stronicowyparser_potrzebne_modul.UzyskanieNazwyStronyWoluminuZParametramiOrazIdentyfikatoremZTabeliWoluminu(tab[1],false); local czy_podrecznik=((mw.ustring.match(artykul,"^%u"))and((not mw.ustring.match(artykul,"%l%u"))or(mw.ustring.match(artykul,"%s")))) local function StronyWstepu(artykul) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=true; for _,wzor in ipairs(stronicowyparser_obiekty_modul.artykularne_niespisowe) do tak=tak and (not mw.ustring.match(artykul,wzor)); if(not tak)then return tak;end; end; return tak; end; if((czy_glowny_spis_tresci)and(artykul==""))then return false,numer_rodzaju_artykulu,czy_podrecznik,false; else if((czy_usun_okladka)--[[or(numer_rodzaju_artykulu>1)]]or(--[[(numer_rodzaju_artykulu==1)and]](artykul~="")and(StronyWstepu(artykul))))then return true,numer_rodzaju_artykulu,czy_podrecznik,false; else return true,numer_rodzaju_artykulu,czy_podrecznik,true; end; end; else return true,numer_rodzaju_artykulu,--[[czy_podrecznik]]false,false; end; end; end; return false,nil; end; function p.CzySpecjalnyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) if(obiekt=="SZABLON")then local szablonowe_modul=require("Module:Szablonowe"); local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) ---- if(nazwa_szablonu=="SpisTreści")then return true,1; else local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tabela_spisu=stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]; if(tabela_spisu)then local parametr_linku; if(tabela_spisu[1]==true)then local numer_link=tabela_spisu["numer_link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; else local numer_link=tabela_spisu["link"]; parametr_linku=tabela_parametrow_szablonu[numer_link]; end; if(parametr_linku)then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(parametr_linku,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; end; end; end; end; end); if(czy_element_spisu)then return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; end; return false; end; function p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci) local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci); if((not czy_element_spisu)and(not numer_rodzaju_artykulu))then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzySpecjalnyElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci); end; return czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka; end; function p.CzyTamElementyNieSpisoweArtykularne(linia,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do --czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(not czy_okladka))then return true; elseif((not czy_element_spisu)and(numer_rodzaju_artykulu))then tak=true; break; elseif(czy_okladka)then tak=true; break; end; end; end; return (not tak); end; function p.SzukajObiektuArtykularnegoWeElemencieTekstowym(tekst,szablon_normy_kodowania_szablonu,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, czy_usun_okladka,czy_glowny_spis_tresci,czy_wszystkie_linki,z_innymi_stronami) local start=1; while(true)do local start_szablon,koniec_szablon,obiekt_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst,szablon_normy_kodowania_szablonu,start); local koniec_obiekt;local kod_obiekt;local obiekt=nil; if(start_szablon)then if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local kod=kod_szablon; local obiekt=obiekt_szablon; local kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,czy_usun_okladka,czy_glowny_spis_tresci); if((czy_element_spisu)and((czy_wszystkie_linki)or(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((z_innymi_stronami)and(numer_rodzaju_artykulu>1)))))then return true; end; end; start=koniec_szablon; else return false; end; end; end; function p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,spacje_na_poczatku) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local tak=false; local techniczne_modul=require("Module:Techniczne"); linia=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(linia); for _,p_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_spis_tresci) do tak=tak or (((not spacje_na_poczatku) or (not mw.ustring.match(linia,"^%s+"))) and (mw.ustring.match(linia,"^"..p_wzor.."$"))); if(tak)then return true;end; end; return nil; end; function p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,jak) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local techniczne_modul=require("Module:Techniczne"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^\n]+)",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then local czy_zerowy_spis_rzeczy=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(rozdzial,true); if(czy_zerowy_spis_rzeczy)then return liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial; else liczba_od=jak and liczba_start_rozdzial or liczba_koniec_rozdzial; end; else return; end; end; return nil; end; function p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) if(obiekt=="SZABLON")then return szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local czy_ce=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(not czy_ce)then return;end; local zawartosc=tabela_parametrow_szablonu[czy_ce]; if(not zawartosc)then return;end; return true; end); elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,tab_atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if((nazwa)and(zawartosc))then if(nazwa=="center")then return true; end; end; end; end; function p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst_rozwiniety_calego_artykulu,wzor,liczba_od,liczba_do,jak,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); while(true)do local liczba_start_rozdzial,liczba_koniec_rozdzial,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"("..wzor..")",liczba_od,liczba_do,jak); if(liczba_start_rozdzial)then if((not mw.ustring.match(linia,"^(=[^\n]*[^%s=][^\n]*=)[^%S\n]*$"))and(not mw.ustring.match(linia,"^[%*#:;<>]")))then local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul); local szablon,obiekt,kod,poziom_iteracji=iterator(); local wynik=((szablon)and(obiekt)and(kod))and p.CzyWprowadzenieNapisuTekstuCentrowany(szablon,obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) or nil; if(not wynik)then local rozdzial,czy_standardowe_rozdzialy=stronicowyparser_rozdzialy_modul.CzyZerowyNapisWprowadzeniaTekstu(linia,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if((rozdzial)and(czy_standardowe_rozdzialy))then return liczba_start_rozdzial,liczba_koniec_rozdzial,linia; end; end; end; if(jak)then liczba_od=liczba_start_rozdzial;else liczba_od=liczba_koniec_rozdzial;end; else return; end; end; return nil; end; function p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_od,liczba_do,czy_od_tylu,czy_spis_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local techniczne_modul=require("Module:Techniczne"); local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local function RozpatrywanieNapisoweWprowadzeniaTekstu(wzor,czy_rozdzial_rownaniowy_dodatni,__FUNKCJA1,__FUNKCJA2) local liczba_start;local liczba_koniec; local liczba_wys=liczba_od; local spis_naglowka; local spis_naglowka_stare; local spis_naglowka_poziom; while(true)do local __liczba_start,__liczba_koniec,wartosc_przechwycona; if(czy_rozdzial_rownaniowy_dodatni)then __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu) else __liczba_start,__liczba_koniec,wartosc_przechwycona=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,wzor,liczba_wys,liczba_do,czy_od_tylu); end; if(__liczba_start)then if(not czy_od_tylu)then liczba_wys=__liczba_koniec;else liczba_wys=__liczba_start;end; local szablon,wartosc_przechwycona=__FUNKCJA1(wartosc_przechwycona); local wynik=__FUNKCJA2(szablon,wartosc_przechwycona,function(naglowek,poziom_naglowka) if(czy_spis_tresci)then spis_naglowka_stare=naglowek; spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; if(czy_spis_tresci(spis_naglowka))then liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; else spis_naglowka=naglowek; if(poziom_naglowka)then spis_naglowka_poziom=poziom_naglowka;end; liczba_start,liczba_koniec=__liczba_start,__liczba_koniec; return false; end; return true; end); if(not wynik)then break; end; else break; end; end; if(liczba_start)then return liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom; end; end; local obiekt="SZABLON"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,spis_naglowka_szablon_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu( norma_kodowania_szablonu, false, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) local liczba_szablon_centrowany=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; if(liczba_szablon_centrowany)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_centrowany]; if(naglowek)then if(not mw.ustring.match(naglowek,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(naglowek,nil); end; end; else local liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu)then local naglowek=tabela_parametrow_szablonu[liczba_szablon_napisowu_sztucznego_wprowadzenia_tekstu]; if(naglowek)then local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if((naglowek)and(poziom_naglowka))then return __FUNKCJA(naglowek,poziom_naglowka); end; end; end; end; return true; end); return wynik; end); local obiekt="ZNACZNIK"; local norma_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt); local liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,spis_naglowka_znacznik_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu( norma_kodowania_szablonu, false, function(kod) kod=kod and tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; return szablon,kod; end, function(szablon,kod,__FUNKCJA) local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(nazwa=="center")then if(zawartosc)then if(not mw.ustring.match(zawartosc,"^%s*%d+%s*/%s*%d+%s*$"))then return __FUNKCJA(zawartosc,nil); end; end; elseif(znaczniki_wprowadzenia_tekstu[nazwa])then if(zawartosc)then local numer_rozdzialu=stronicowyparser_rozdzialy_modul.HnNumerWprowadzeniaTekstu(nazwa,atrybuty); if(numer_rozdzialu)then return __FUNKCJA(zawartosc,numer_rozdzialu); end; end; end; return true; end); local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local wzor_rozdzialu_dodatniego="(=+[^\n]*[^=\n][^\n]*=+)[^%S\n]*"; local liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_dodatni_poziom=RozpatrywanieNapisoweWprowadzeniaTekstu( wzor_rozdzialu_dodatniego, true, function(naglowek) return naglowek,naglowek; end, function(naglowek,_,__FUNKCJA) local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(naglowek); if(naglowek)then return __FUNKCJA(naglowek,poziom_naglowka); end; return true; end); if((liczba_start_szablon)or(liczba_start_znacznik)or(liczba_start_dodatni))then local _max_min; if(czy_od_tylu)then _max_min=math.max(math.max(liczba_start_szablon or 0,liczba_start_znacznik or 0),liczba_start_dodatni or 0); else _max_min=math.min(math.min(liczba_start_szablon or #tekst_rozwiniety_calego_artykulu,liczba_start_znacznik or #tekst_rozwiniety_calego_artykulu),liczba_start_dodatni or #tekst_rozwiniety_calego_artykulu); end; local function ParametryNapisuWprowadzeniaTekstu(liczba_start,liczba_koniec,spis_naglowka_stare,spis_naglowka,spis_naglowka_poziom) local spis_naglowka_stare=spis_naglowka_stare or spis_naglowka; if((not czy_spis_tresci)and(spis_naglowka))then spis_naglowka=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(spis_naglowka,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) spis_naglowka=parametry_modul["Odstępy"]{[1]=spis_naglowka,[2]="tak",}; end; return liczba_start,liczba_koniec,spis_naglowka,spis_naglowka_stare,spis_naglowka_poziom; end; if((liczba_start_szablon)and(_max_min==liczba_start_szablon))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_szablon,liczba_koniec_szablon,spis_naglowka_szablon_stare,spis_naglowka_szablon,spis_naglowka_szablon_poziom); elseif((liczba_start_znacznik)and(_max_min==liczba_start_znacznik))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_znacznik,liczba_koniec_znacznik,spis_naglowka_znacznik_stare,spis_naglowka_znacznik,spis_naglowka_znacznik_poziom); elseif((liczba_start_dodatni)and(_max_min==liczba_start_dodatni))then return ParametryNapisuWprowadzeniaTekstu(liczba_start_dodatni,liczba_koniec_dodatni,spis_naglowka_dodatni_stare,spis_naglowka_dodatni,spis_naglowka_dodatni_poziom); end; end; return nil; end; function p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local szablonowe_modul=require("Module:Szablonowe"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablony_wprowadzenia_napisu_spisu_rzeczy=stronicowyparser_obiekty_modul.szablony_wprowadzenia_napisu_spisu_rzeczy; local znaczniki_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.znaczniki_wprowadzenia_tekstu; local szablony_sztucznego_wprowadzenia_tekstu=stronicowyparser_obiekty_modul.szablony_sztucznego_wprowadzenia_tekstu; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local linki=function(zawartosc) local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(zawartosc,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="LINKW")or(obiekt=="LINKZ"))then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; elseif(obiekt=="SZABLON")then local szablon,obiekt,kod,dalszy_tekst=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if((stronicowyparser_obiekty_modul.linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) or(stronicowyparser_obiekty_modul.inne_linki_szablony_elementy_spisu_rzeczy[nazwa_szablonu]) )then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; local tab_szablon_link_intelignetny=stronicowyparser_potrzebne_modul.PodzielNaElementyNazwowyWikiLinkInteligentny(nazwa_szablonu,tablica_danych_parametrow_szablonu_strony,kod); if(tab_szablon_link_intelignetny)then local dalszy_tekst=mw.ustring.match(zawartosc,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod).."(.*)$"); return szablon,obiekt,kod,dalszy_tekst; end; end); return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; if(obiekt=="SZABLON")then local szablon,obiekt,kod=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) local czy_numer_parametru_naglowka=szablony_wprowadzenia_napisu_spisu_rzeczy[nazwa_szablonu]; local zawartosc; if(not czy_numer_parametru_naglowka)then czy_numer_parametru_naglowka=szablony_sztucznego_wprowadzenia_tekstu[nazwa_szablonu]; if(not czy_numer_parametru_naglowka)then return nil;end; local zawartosc_szablonu=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc_szablonu)then return nil;end; zawartosc_szablonu=mw.text.trim(zawartosc_szablonu); local naglowek,poziom_naglowka=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(zawartosc_szablonu); if((not naglowek)or(not poziom_naglowka))then return nil;end; zawartosc=naglowek; else zawartosc=tabela_parametrow_szablonu[czy_numer_parametru_naglowka]; if(not zawartosc)then return nil;end; end; local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end); return szablon,obiekt,kod; elseif(obiekt=="ZNACZNIK")then local nazwa,zawartosc,atrybuty=szablonowe_modul.WydzielanieNazwyTekstuOrazOpcjiAtrybutowychZeZnacznika(szablon,pelna_nazwa_spisu_tresci,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,kod); if(zawartosc)then if((nazwa=="center")or(znaczniki_wprowadzenia_tekstu[nazwa]))then local szablon,obiekt,kod,dalszy_tekst=linki(zawartosc); if((szablon)and(obiekt)and(kod))then return szablon,obiekt,kod,dalszy_tekst; end; return nil; end; end; return nil; end; end; function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek+1,liczba_obiekt_start_nowe-1); if((mw.ustring.match(str,"^%s*'+(.+)'+%s*$")) or(mw.ustring.match(str,"^[%*#:;<>]+.*$") or(mw.ustring.match(str,"^[%s%p%w]*$"))) )then return nil;end; local ile_punktowanych=0; local szablonowe_modul=require("Module:Szablonowe"); local _,ile=mw.ustring.gsub(str,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[%*#;:<>]"))or(mw.ustring.match(linia,"^%s*$")))then ile_punktowanych=ile_punktowanych+1; else local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(numer_rodzaju_artykulu>2))then ile_punktowanych=ile_punktowanych+1; break; end; end; end; end); if(ile_punktowanych>=ile)then return nil; end; str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then if(czy_zeruj)then tab_zmienne.liczba_nie_okladka_artykul=nil; tab_zmienne.liczba_pierwszy_rozdzialowy_artykul=nil; tab_zmienne.czy_ten_rozdzial=nil; --tab_zmienne={["liczba_nie_okladka_artykul"]=liczba_nie_okladka_artykul,["liczba_pierwszy_rozdzialowy_artykul"]=liczba_pierwszy_rozdzialowy_artykul,["czy_ten_rozdzial"]=czy_ten_rozdzial,} end; return true; end; end; return nil; end; end; function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe) local odtylu=liczba_obiekt_start_spac_par; local liczba_start_naglowek;local liczba_koniec_naglowek;local naglowek;local poziom_naglowka; local liczba_start_naglowek_dalej;local liczba_koniec_naglowek_dalej;local naglowek_dalej;local poziom_naglowka_dalej; local czy_fun=false; local czy_pierwszy=nil; local liczba_koniec_naglowek_poczt=nil; local szablonowe_modul=require("Module:Szablonowe"); while(true)do local liczba_start_naglowek_nowe;local liczba_koniec_naglowek_nowe;local naglowek_nowe;local poziom_naglowka_nowe; if(czy_dodatni==1)then local _; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,_,poziom_naglowka_nowe=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); elseif(czy_dodatni==2)then local str_lista_naglowek; liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,str_lista_naglowek,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([%*#:;<>]+)[^%S\n]*([^\n]-)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and (-#str_lista_naglowek) or nil; else liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^%S\n]*[^\n]-:)",odtylu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); poziom_naglowka_nowe=liczba_start_naglowek_nowe and 0 or nil; end; if(not liczba_start_naglowek_nowe)then break; else poziom_naglowka_nowe=(czy_dodatni==1)and (poziom_naglowka_nowe or 2) or poziom_naglowka_nowe; local czy_tak_spisowe=(czy_dodatni==1) and true or p.CzyTamElementyNieSpisoweArtykularne(mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe),nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); if(czy_tak_spisowe)then if(not czy_pierwszy)then liczba_koniec_naglowek_poczt=liczba_koniec_naglowek_nowe; czy_pierwszy=true; end; if(liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe<liczba_start_naglowek)then if(liczba_koniec_naglowek_nowe+1<=liczba_start_naglowek-1)then local pomiedzy_naglowkami=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_start_naglowek-1); local czy_pomiedzy_naglowkami=(pomiedzy_naglowkami)and(not mw.ustring.match(pomiedzy_naglowkami,"^%s*$")); if(czy_pomiedzy_naglowkami and(((czy_dodatni==1) and( ((poziom_naglowka_nowe)and(not poziom_naglowka)) or( ((poziom_naglowka_nowe)and(poziom_naglowka)) and(poziom_naglowka_nowe>=poziom_naglowka) ) ) or( ((czy_dodatni==2)and(poziom_naglowka_nowe<=poziom_naglowka)) or((czy_dodatni~=1)and(czy_dodatni~=2)) ) )--[[or( not mw.ustring.match(pomiedzy_naglowkami,szablonowe_modul.NormaWzoruKodowaniaTekstu()) )]]) )then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; elseif(liczba_start_naglowek~=liczba_koniec_naglowek_nowe)then liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; break; end; end; if(((czy_dodatni==1)or(czy_dodatni==2))and(AnalizowanieSekcjowe)and(not czy_fun))then local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek_nowe); if(not spis_tresci)then --local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); local czy_wynik=AnalizowanieSekcjowe(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe); if(czy_wynik)then return false;end; end; czy_fun=true; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_nowe,liczba_koniec_naglowek_nowe,naglowek_nowe,poziom_naglowka_nowe; end; end; odtylu=liczba_start_naglowek_nowe; end; return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; end function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe) local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka,liczba_start_naglowek_dalej=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,1,czy_bez_naglowka,AnalizowanieSekcjowe); ---- if((AnalizowanieSekcjowe)and(liczba_start_naglowek==false))then return nil;end; ---- local str_spacja_lub_zerowy_naglowek=function(tekst) local ile_znalezione_linie_wedlug_wzoru=0; local _,ile=mw.ustring.gsub(tekst,"([^\n]+)",function(linia) if((mw.ustring.match(linia,"^[^%*#:;<>\n].-:%s*$"))or(mw.ustring.match(linia,"^%s*$")))then ile_znalezione_linie_wedlug_wzoru=ile_znalezione_linie_wedlug_wzoru+1; end; return nil; end); if(ile==ile_znalezione_linie_wedlug_wzoru)then return true;end; return nil; end; if((not liczba_start_naglowek_dalej)and(liczba_start_naglowek))then local liczba_szukaj_odtylu_tekst=liczba_start_naglowek; local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]+)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(not liczba_start_rozdzial)then while(true)do local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_start_naglowek,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp,liczba_start_naglowek); if(not str_spacja_lub_zerowy_naglowek(str))then break; end; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; if(not liczba_start_naglowek_temp)then break;end; end; end; elseif(not liczba_start_naglowek)then local liczba_szukaj_odtylu_tekst=liczba_obiekt_start_kolei_par; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+([^\n]-[^'\n][^\n]-)''+",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_naglowek_temp)then local stronicowyparser_spistresci_modul=require("Module:StronicowyParser/SpisTreści") local spis_naglowka_szablon=stronicowyparser_spistresci_modul.AnalizaNapisuWprowadzeniaTekstu(naglowek_temp,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not mw.ustring.match(spis_naglowka_szablon,"!%s*$")and(not mw.ustring.match(spis_naglowka_szablon,"%S!")))then ---- local tak=false; local czy_w_petli=false; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(naglowek_temp,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do czy_w_petli=true; if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(not czy_okladka))then if(numer_rodzaju_artykulu==1)then tak=true; break; end; end; end; end; if((tak)or(not czy_w_petli))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,0; end; end; else local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,2,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; liczba_obiekt_start_kolei_par=liczba_start_naglowek; end; end; local liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp,liczba_start_naglowek_dalej_temp=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,3,czy_bez_naglowka,nil); if(liczba_start_naglowek_temp)then if(liczba_koniec_naglowek_temp+1<=liczba_obiekt_start_kolei_par-1)then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_temp+1,liczba_obiekt_start_kolei_par-1); if(mw.ustring.match(str,"^%s*$"))then liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; else liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=liczba_start_naglowek_temp,liczba_koniec_naglowek_temp,naglowek_temp,poziom_naglowka_temp; end; end; end; end; return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; end; function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul) local liczba_spac=0; if(liczba_start)then local liczba_start_tekst=liczba_start;local liczba_koniec_tekst;local linia; while(true)do local liczba_start_tekst_stare=liczba_start_tekst; linia=nil local liczba_szukaj_odtylu_tekst=liczba_start_tekst; liczba_start_tekst,liczba_koniec_tekst,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*#:;<>\n][^\n]*)",liczba_szukaj_odtylu_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); local rozdzial_dodatki=linia and mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$") or nil; if(rozdzial_dodatki)then local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then return (czy_dalej_rozdzial)and liczba_start or liczba_koniec_tekst,liczba_spac; end; end; local spacja=linia and mw.ustring.match(linia,"^%s*$") or nil; if(spacja)then liczba_spac=liczba_spac+liczba_koniec_tekst-liczba_start_tekst+1; elseif((not spacja)and(linia))then local czy_spis=nil; local spis_tresci=p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(linia,true); local liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=nil,nil,nil; local czy_rozdzial_dwukropkowy; if(not spis_tresci)then liczba_start_rozdzial,liczba_koniec_rozdzial,rozdzial=p.ZnajdowanieZerowegoSpisuRzeczy(tekst_rozwiniety_calego_artykulu,liczba_start_tekst,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); if(liczba_start_rozdzial)then liczba_start=liczba_start_rozdzial; else czy_rozdzial_dwukropkowy=mw.ustring.match(linia,"^[^\n]+:[^%S\n]*$"); liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; end; czy_spis=liczba_start_rozdzial and true or nil; else liczba_start=--[[spis_tresci and]] liczba_start_tekst--[[ or liczba_koniec_tekst]]; czy_spis=true; end; if(not liczba_start_rozdzial)then if(not spis_tresci)then local szablonowe_modul=require("Module:Szablonowe"); if(mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu()))then local tak=false; local czy_okladka=nil; local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and(not czy_okladka))then tak=true; break; end; end; end; liczba_start=tak and liczba_start_tekst or liczba_start; czy_spis=((czy_rozdzial_dwukropkowy)and(not tak))and true or nil; else liczba_start=czy_rozdzial_dwukropkowy and liczba_start_tekst or liczba_koniec_tekst; czy_spis=czy_rozdzial_dwukropkowy and true or nil; end; else liczba_start=--[[spis_tresci and ]]liczba_start_tekst--[[ or liczba_koniec_tekst]]; end; end; return liczba_start,liczba_spac,czy_spis; elseif(not liczba_start_tekst)then return (czy_dalej_rozdzial)and liczba_start or math.min(liczba_pierwszy_rozdzialowy_artykul or 1,liczba_start),liczba_spac,nil; end; end; end; return liczba_start,liczba_spac,nil; end; function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki) local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); ---- ---- if((czy_element_spisu)and((czy_wszystkie_linki)or((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return true; else local szablonowe_modul=require("Module:Szablonowe"); local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(dalszy_tekst,nil,tablica_analizy_obiektow_strony_dany_modul); local szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; for szablon,obiekt,kod in iterator do local czy_znajdz=mw.ustring.match(dalszy_tekst,szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_znajdz)then local czy_tekst=czy_nieoddzielone or mw.ustring.match(linia,szablonowe_modul.NormaWzoruKodowaniaTekstu(szablon_obiekt_temp,szablon_kod_temp).."[%p%s%d%.]*"..szablonowe_modul.NormaWzoruKodowaniaTekstu(obiekt,kod)); if(czy_tekst)then if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu)and((czy_wszystkie_linki)or((numer_rodzaju_artykulu==1)and(not czy_okladka))or(numer_rodzaju_artykulu>1)))then return true; end; end; else return false; end; szablon_obiekt_temp,szablon_kod_temp=obiekt,kod; end; end; return false; end; end; function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa) local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do local liczba_linki_nierozdzialowe_szablonu,_,linia,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*))",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); --- if((liczba_linki_nierozdzialowe_szablonu) and( (przed_tekst=="") or(mw.ustring.match(przed_tekst,"^[%p%s%d%.]*$")) ) )then liczba_spisu=liczba_linki_nierozdzialowe_szablonu; if((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ"))then local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; ---- local czy_znalezione=p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,false,false); if(czy_znalezione)then return liczba_linki_nierozdzialowe_szablonu,true;end; return liczba_spisowa,false; end; else return liczba_spisowa,false; end; end; end; function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz) local liczba_start=liczba_przed_rozdzialem; local liczba_start_sugerowane,liczba_spac,czy_spis=p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,true,liczba_pierwszy_rozdzialowy_artykul); if(czy_spis)then liczba_start=liczba_start_sugerowane; return liczba_start,true; elseif(not czy_znajdz)then liczba_start=liczba_przed_rozdzialem; return liczba_start,true; end; if(liczba_start_sugerowane<liczba_start-liczba_spac)then if((not liczba_start_naglowek_przed)or(liczba_start_sugerowane>liczba_start_naglowek_przed))then liczba_start=liczba_start_sugerowane; local liczba_start_od_tylu=liczba_start; local liczba_start_nowa=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"''+[^\n]*[^'][^\n]*''+",liczba_start_od_tylu,liczba_start_rozdzial,true); if(liczba_start_nowa)then if((not liczba_start_naglowek_przed)or(liczba_start_nowa>liczba_start_naglowek_przed))then liczba_start=liczba_start_nowa; end; else liczba_start=liczba_start_sugerowane; end; end; else liczba_start=liczba_start_sugerowane; end; return liczba_start,false; end; function p.PoliczKoniecZakodowanegoTekstuArtykularnego(tekst_rozwiniety_calego_artykulu,liczba_obiekt_koniec,liczba_koniec) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); while(true)do local poczatek_nierozdzalowe=liczba_obiekt_koniec; local liczba_start_nieszablon_nielink_nierozdzialowa,liczba_koniec_nieszablon_nielink_nierozdzialowa,linia=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"([^%*:;#<>'\n]+[^\n]*)",poczatek_nierozdzalowe,nil,false) if(liczba_start_nieszablon_nielink_nierozdzialowa)then local rozdzial_dodatki=mw.ustring.match(linia,"^(=+([^\n]*[^=\n][^\n]*)=+)[^%S\n]*$"); if(rozdzial_dodatki)then local naglowek=stronicowyparser_rozdzialy_modul.PodajNapisPoziomuWprowadzeniaTekstu(rozdzial_dodatki); if(naglowek)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return liczba_koniec; end; end; local czy_spacje=mw.ustring.match(linia,"^%s*$"); if(not czy_spacje)then liczba_koniec=liczba_start_nieszablon_nielink_nierozdzialowa; return liczba_koniec; elseif(czy_spacje)then liczba_obiekt_koniec=liczba_koniec_nieszablon_nielink_nierozdzialowa; end; else liczba_koniec=#tekst_rozwiniety_calego_artykulu; return liczba_koniec; end; end; return liczba_koniec; end; function p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_start,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony) local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; local szablonowe_modul=require("Module:Szablonowe"); local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"); while(true)do local liczba_start_szablon,liczba_koniec_szablon,kod_szablon=p.SzukanieNaPodstawieWzoru(tekst_rozwiniety_calego_artykulu,szablon_normy_kodowania_szablonu,liczba_obiekt_start_od_tylu,liczba_start,true); if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local obiekt="SZABLON"; local kod=kod_szablon and tonumber(kod_szablon) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; ---- local liczba_koniec_szablon,norma_wzoru=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow) if(nazwa_szablonu=="Licencja")then return liczba_koniec_szablon,szablonowe_modul.NormaKoduKodowaniaTekstu(obiekt,kod); end; end); if(liczba_koniec_szablon)then return liczba_koniec_szablon,norma_wzoru; end; elseif(not liczba_start_szablon)then return nil; end; end; end; function p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local tak=nil; local techniczne_modul=require("Module:Techniczne"); local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,1,nil,false,function(naglowek) naglowek=techniczne_modul.UsuwanieZnakoweKontrolneNiewidzialne(naglowek); if(mw.ustring.match(naglowek,"^"..tab_wzor[1].."$"))then return true; end; end,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(not liczba_rozdzial_start)then liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"("..tab_wzor[1]..")",liczba_rozdzial_koniec,nil,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)then tak=true;end; end; if(liczba_rozdzial_start)then local liczba_rozdzial_start2,liczba_rozdzial_koniec2; if(not tak)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); else local liczba_rozdzial_start3,liczba_rozdzial_koniec3=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst,liczba_rozdzial_koniec,nil,false,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local liczba_rozdzial_start4,liczba_rozdzial_koniec4=p.ZnajdowanieZerowegoNapisuWprowadzeniaTekstu(tekst,"[^%*#;:<>\n]+[^\n]+",liczba_rozdzial_koniec,nil,true,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); ---- if((liczba_rozdzial_start3)and(liczba_rozdzial_start4))then if(liczba_rozdzial_start3<liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; end; elseif(liczba_rozdzial_start3)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start3,liczba_rozdzial_koniec3; elseif(liczba_rozdzial_start4)then liczba_rozdzial_start2,liczba_rozdzial_koniec2=liczba_rozdzial_start4,liczba_rozdzial_koniec4; else liczba_rozdzial_start2,liczba_rozdzial_koniec2=nil,nil; end; end; ----- local str_bibliografia=mw.ustring.sub(tekst,liczba_rozdzial_koniec+1,(liczba_rozdzial_start2 and (liczba_rozdzial_start2-1) or #tekst)); if((not str_bibliografia)or(str_bibliografia==""))then return tekst;end; local tekst1=mw.ustring.sub(tekst,1,liczba_rozdzial_koniec); local tekst2=liczba_rozdzial_start2 and mw.ustring.sub(tekst,liczba_rozdzial_start2,#tekst) or ""; ----- local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); local szablonowe_modul=require("Module:Szablonowe"); local techniczne_modul=require("Module:Techniczne"); str_bibliografia=mw.ustring.gsub(str_bibliografia,"([^\n]+)",function(linia) local obiekt,kod,dalszy_tekst=mw.ustring.match(linia,"^[%*:;#<>]+%s*'*%s*"..szablonowe_modul.NormaWzoruKodowaniaTekstu().."([^\n]*)$"); if((obiekt)and(kod)and(dalszy_tekst))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((not czy_okladka)and(czy_element_spisu)and(numer_rodzaju_artykulu==1))then return linia; end; end; linia=dalszy_tekst or linia; local iterator=szablonowe_modul:IteratorSzablonowyZakodowanegoTekstu(linia,nil,tablica_analizy_obiektow_strony_dany_modul); for szablon,obiekt,kod in iterator do if(((tab_wzor[2])and((obiekt=="LINKW")or(obiekt=="LINKZ")))or(obiekt=="SZABLON"))then local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if(czy_element_spisu)then return linia; elseif(obiekt=="SZABLON")then local wynik=szablonowe_modul.UzyskanieWynikuZOperacjiSzablonowychNaSzablonachZnacznikachParserachZmiennychOrazModyfikatorachZDanychObiektuSZABLON(szablon,tablica_danych_parametrow_szablonu_strony,kod,pelna_nazwa_spisu_tresci_szablonowa,function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) if((stronicowyparser_obiekty_modul.szablony_przypisowe[nazwa_szablonu])or(stronicowyparser_obiekty_modul.szablony_licencji[nazwa_szablonu]))then return linia; else return ""; end; end,nil,nil,nil,nil,nil,nil,nil,nil, function(tabela_parametrow_szablonu,nazwa_szablonu,tabela_modyfikatorow,szablon,obiekt,kod) return ""; end); return wynik; end; end; end; return ""; end); tekst=tekst1..str_bibliografia..tekst2; end; return tekst; end; function p.AnalizaSpisuRzeczy(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) local stronicowyparser_rozdzialy_modul=require("Module:StronicowyParser/Rozdziały"); local czy_uruchomiony_analizator_spisu_rzeczy_strony=stronicowyparser_rozdzialy_modul.UruchamianieAnalizatoraSpisuRzeczyStrony(); if(not czy_uruchomiony_analizator_spisu_rzeczy_strony)then return nil;end; ---- local liczba_start=nil;local liczba_koniec=nil; ---- local szablonowe_modul=require("Module:Szablonowe"); local parametry_modul=require("Module:Parametry"); local stronicowyparser_obiekty_modul=mw.loadData("Module:StronicowyParser/obiekty"); ----- local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu(); ---- local liczba_obiekt_koniec=1; local liczba_pierwszy_rozdzialowy_artykul=nil; local liczba_nie_okladka_artykul=nil; local tab_nazwa_spisow_przekierowaniowych={}; local liczba_start_rozdzial=1; local liczba_obiekt_start_poprz=nil; local liczba_obiekt_koniec_poprz=nil; local liczba_nie_okladka_artykul_koniec=nil; local wzor_szablonu_list="([%*:#;<>]*)([^%S\n]*)([^\n]-)[^%S\n]*[\'\"]*[^%S\n]*"..szablon_normy_kodowania_szablonu.."[^%S\n]*[\'\"]*[^%S\n]*([^\n]-)[^%S\n]*"; while(true)do local liczba_start_szablon,liczba_koniec_szablon,lista_szablon,odstepy_poczatku_rozdzialu,przerwa_szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,wzor_szablonu_list,liczba_obiekt_koniec,nil,false); if(liczba_start_szablon)then liczba_obiekt_koniec=liczba_koniec_szablon; --local czy_rozdzial_dodatni=((lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local czy_rozdzial_dodatni; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=((czy_dobry_obiekt)and( ( (lista_szablon~="")and( (przerwa_szablon=="") or((mw.ustring.match(lista_szablon,"^:"))and((przerwa_szablon==">")or(przerwa_szablon=="<"))) or(not mw.ustring.match(lista_szablon,"^:")) ) ) or((lista_szablon=="")and(przerwa_szablon=="")and(not mw.ustring.match(dalszy_tekst,"^>"))) )); czy_listy=czy_listy or ((czy_dobry_obiekt)and(lista_szablon=="")and(odstepy_poczatku_rozdzialu=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((not czy_element_spisu)or(czy_okladka))then local iterator=mw.ustring.gmatch(dalszy_tekst,szablon_normy_kodowania_szablonu) local czy_element_spisu_temp;local numer_rodzaju_artykulu_temp;local czy_podrecznik_temp;local czy_okladka_temp; local tak=false; for obiekt,kod in iterator do if((obiekt=="SZABLON")or(obiekt=="LINKW")or(obiekt=="LINKZ"))then kod=tonumber(kod) or nil; local szablon=tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp=p.CzyGeneralnieElementSpisuRzeczy(szablon,obiekt,kod,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,false,true); if((czy_element_spisu_temp)and(not czy_okladka_temp))then if(numer_rodzaju_artykulu_temp==1)then tak=true; break; end; end; end; end; if(tak)then czy_element_spisu,numer_rodzaju_artykulu,czy_podrecznik,czy_okladka=czy_element_spisu_temp,numer_rodzaju_artykulu_temp,czy_podrecznik_temp,czy_okladka_temp; end; end; liczba_pierwszy_rozdzialowy_artykul=(not liczba_pierwszy_rozdzialowy_artykul)and(czy_element_spisu and liczba_obiekt_start or nil) or liczba_pierwszy_rozdzialowy_artykul; liczba_nie_okladka_artykul=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and(dalszy_tekst=="")))))) and liczba_obiekt_start or liczba_nie_okladka_artykul; liczba_nie_okladka_artykul_koniec=((not liczba_nie_okladka_artykul)and((czy_element_spisu)and(((numer_rodzaju_artykulu==1)and(not czy_okladka))or((numer_rodzaju_artykulu>=2)and((lista_szablon)and(lista_szablon~="") and (przerwa_szablon=="") and (dalszy_tekst=="")))))) and liczba_obiekt_koniec or liczba_nie_okladka_artykul_koniec; ---- if((czy_element_spisu)and(numer_rodzaju_artykulu==1)and(czy_podrecznik)and(not czy_okladka))then local czy_bez_naglowka=nil; local liczba_obiekt_start_nowe=liczba_nie_okladka_artykul or liczba_obiekt_start; local liczba_obiekt_koniec_nowe=liczba_nie_okladka_artykul_koniec or liczba_obiekt_koniec; local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=nil,nil,nil,nil; local czy_ten_rozdzial=true; local liczba_obiekt_start_nowe_temp=liczba_obiekt_start_nowe; local liczba_spis_tresci_start,liczba_spis_tresci_koniec,spis_naglowka_dodatni_start,spis_naglowka_dodatni_stare_start,poziom_naglowka_start=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,liczba_obiekt_start_nowe,liczba_start_rozdzial,true,function(naglowek) if(p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron(naglowek))then return true;end; end,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); local czy_zeruj=(not liczba_spis_tresci_start)and true or false; liczba_obiekt_start_nowe=liczba_spis_tresci_start or liczba_obiekt_start_nowe; local tab_zmienne={ liczba_nie_okladka_artykul=liczba_nie_okladka_artykul, liczba_pierwszy_rozdzialowy_artykul=liczba_pierwszy_rozdzialowy_artykul, czy_ten_rozdzial=czy_ten_rozdzial, }; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; if(not czy_ten_rozdzial)then if(liczba_obiekt_start~=liczba_obiekt_start_nowe_temp)then liczba_start_rozdzial=liczba_obiekt_start_nowe_temp; liczba_obiekt_start_nowe=liczba_obiekt_start; czy_ten_rozdzial=true; tab_zmienne.czy_ten_rozdzial=czy_ten_rozdzial; liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start,czy_bez_naglowka,p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych)); liczba_nie_okladka_artykul,liczba_pierwszy_rozdzialowy_artykul,czy_ten_rozdzial=tab_zmienne.liczba_nie_okladka_artykul,tab_zmienne.liczba_pierwszy_rozdzialowy_artykul,tab_zmienne.czy_ten_rozdzial; end; end; ---- jest to pozycja nagłówka, która mówi, który nagłówek ma być pierwszy, czy ten od spisu treści, czy ten dalszy; liczba_start_naglowek=( (not liczba_spis_tresci_start) or((liczba_spis_tresci_start)and(not poziom_naglowka_start)) -- nagłówek spisu tresci centrowany; -- nagłówki oba dodatnie niecentrowane, oba ujemne lub ten pierwszy dodatni, a drugi ujemny, a pierwszy dodatni; or((poziom_naglowka_start)and(poziom_naglowka))and( ((poziom_naglowka_start>0)and(poziom_naglowka<=0)) or((poziom_naglowka_start<=0)and(poziom_naglowka<=0)and(poziom_naglowka_start>=poziom_naglowka)) or((poziom_naglowka_start>0)and(poziom_naglowka>0)and(poziom_naglowka_start<=poziom_naglowka)) ) ) and liczba_spis_tresci_start or liczba_start_naglowek; ---- if(((not czy_okladka)or((czy_okladka)and(lista_szablon~=""))or(liczba_start_naglowek))and(czy_ten_rozdzial))then ---- czy_bez_naglowka=((not liczba_start_naglowek)or((liczba_obiekt_koniec_poprz or 1)<=(liczba_start_rozdzial or 1))) and true or false; ---- if(liczba_start_naglowek)then local liczba_przed_rozdzialem;local czy_znajdz; liczba_przed_rozdzialem,czy_znajdz=p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_start_naglowek); local odtylu_dalej=--[[liczba_spis_tresci or]] liczba_start_naglowek; local liczba_start_naglowek_przed=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,odtylu_dalej,liczba_start_rozdzial,true,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); 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); local czy_break; liczba_start,czy_break=p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed,liczba_start_naglowek_przed,czy_znajdz); if(czy_break)then break;end; else local liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka=p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_nowe,2,czy_bez_naglowka,function(liczba_koniec_naglowek_nowe,liczba_obiekt_start_nowe) if((liczba_koniec_naglowek_nowe)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek_nowe+1<=liczba_obiekt_start_nowe-1))then local str=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_koniec_naglowek_nowe+1,liczba_obiekt_start_nowe-1); str=mw.ustring.gsub(str,szablonowe_modul.NormaWzoruKodowaniaTekstu("SZABLON"),""); if(not mw.ustring.match(str,"^%s*$"))then return true; end; end; return nil; end); if(liczba_start_naglowek)then liczba_obiekt_start_nowe=liczba_start_naglowek; end; --[[]] local liczba_przed_rozdzialem,czy_znajdz=p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_obiekt_start_nowe); local czy_break; liczba_start,czy_break=p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,nil,czy_znajdz); if(czy_break)then break;end; end; break; else liczba_start_rozdzial=liczba_obiekt_koniec_nowe; liczba_nie_okladka_artykul_koniec=nil; end; liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; else liczba_obiekt_koniec_poprz=((czy_element_spisu)and(numer_rodzaju_artykulu<=2)) and liczba_obiekt_koniec or liczba_obiekt_koniec_poprz; end; end; else break; end; end; if(not liczba_start)then return "";end; local liczba_obiekt_start_od_tylu=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_start_szablon,liczba_koniec_szablon,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); ---- if(liczba_start_szablon)then liczba_obiekt_start_od_tylu=liczba_start_szablon; local czy_dobry_obiekt=((obiekt_szablon=="SZABLON")or(obiekt_szablon=="LINKW")or(obiekt_szablon=="LINKZ")); local czy_listy=(czy_dobry_obiekt)and((lista_szablon~="")or((lista_szablon=="")and(przerwa_szablon==""))); local czy_listy=czy_listy or (czy_dobry_obiekt)and((lista_szablon=="")and(mw.ustring.match(przerwa_szablon,"^=+")and(mw.ustring.match(dalszy_tekst,"=+%s*$")))); local szablon; if(not czy_listy)then local obiekt=obiekt_szablon;local kod=tonumber(kod_szablon) or nil; szablon,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukaniePierwszegoLinkuNapisuNiestandardowegoWprowadzeniaTekstu(obiekt,kod,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(szablon)then czy_listy=true;end; end; if(czy_listy)then local liczba_obiekt_koniec=liczba_koniec_szablon; local liczba_obiekt_start=liczba_start_szablon; local obiekt=obiekt_szablon; local kod=kod_szablon; kod=tonumber(kod) or nil; local szablon=szablon or tablica_analizy_obiektow_strony_dany_modul[obiekt][kod]; local czy_znalezione=nil; if(liczba_start<=liczba_obiekt_start)then czy_znalezione=p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,true,true); end; if(czy_znalezione)then liczba_koniec=p.PoliczKoniecZakodowanegoTekstuArtykularnego(tekst_rozwiniety_calego_artykulu,liczba_obiekt_koniec,liczba_koniec); break; end; end; else break; end; end; if(liczba_koniec)then local koniec_dodatnie_rozdzialy=#tekst_rozwiniety_calego_artykulu; while(true)do local liczba_rozdzial_start,liczba_rozdzial_koniec,rozdzial_nazwa,rozdzial=p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie(tekst_rozwiniety_calego_artykulu,koniec_dodatnie_rozdzialy,liczba_start,true,false,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony); if(liczba_rozdzial_start)and(liczba_rozdzial_start>=liczba_koniec)then koniec_dodatnie_rozdzialy=liczba_rozdzial_start; local czy_znalazles_linki=p.SzukajObiektuArtykularnegoWeElemencieTekstowym(rozdzial,szablon_normy_kodowania_szablonu,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,true,true,true,true); if(czy_znalazles_linki)then liczba_koniec=liczba_rozdzial_koniec;end; else break; end; end; end; if(not liczba_koniec)then return "";end; if(liczba_start>=liczba_koniec)then return "";end; --- Licencja ---- local licencja_koniec,szablon_licencja=p.KoniecStronyLicencja(tekst_rozwiniety_calego_artykulu,liczba_koniec,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; ----- local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); ----- for _,tab_wzor in ipairs(stronicowyparser_obiekty_modul.tablica_nazw_wprowadzenia_tekstu_generalnego_spisu_rzeczy_woluminu_dodatkowe)do tekst=p.KorygowanieTekstuSpisuRzeczy(tekst,tab_wzor,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych); end; --mw.log(tekst) --- Licencja ---- --mw.log(liczba_start,liczba_koniec,"TYTANw",pelna_nazwa_spisu_tresci_szablonowa) --mw.log("TYTAN1",tekst,"TYTAN2") --return nil; --local tekst=mw.ustring.sub(tekst_rozwiniety_calego_artykulu,liczba_start,liczba_koniec); --mw.log(tekst,"TYTAN123") return tekst; end; return p; nprdvbn2jgmqs6lk4nzifkeoszvhac9 Wikibooks:Moduły/StronicowyParser/AnalizaSpisuRzeczy/Tom V 4 63920 558938 558525 2026-10-08T14:18:16Z Persino 2851 /* {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} */ 558938 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h6lenu1fbrobo6wdfteudumtcwn5uzh 558939 558938 2026-10-08T15:21:57Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558939 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi książki rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> h4rqv5cv610ycpf10rbzozgbm8yhyp5 558940 558939 2026-10-08T15:23:58Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558940 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi książki rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 07y9t505h8cu2uh3konpgs2s5cy9s8g 558941 558940 2026-10-08T15:27:45Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558941 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, którym znalezienie, czy jest jakaś pozycja (linii), od tyłu, niebędąca pozycją listy, ani rozdziałem dodatnim równaniowym. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi książki rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> dkenxkluwd93ynccgl0qywibp7a6tcj 558942 558941 2026-10-08T15:40:31Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558942 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, którym znalezienie, czy jest jakaś pozycja (linii), od tyłu, niebędąca pozycją listy, ani rozdziałem dodatnim równaniowym. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi, książki, rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 6u4px3kvrnzhy1flkrt6sj63as06vp0 558943 558942 2026-10-08T15:50:57Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 558943 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtytuł|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrzAnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}, {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, którym znalezienie, czy jest jakaś pozycja (linii), od tyłu, niebędąca pozycją listy, ani rozdziałem dodatnim równaniowym. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi, książki, rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> os8aot52jystjmckjibr2wr148fby3n 558944 558943 2026-10-08T15:55:32Z Persino 2851 558944 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrzAnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, którym znalezienie, czy jest jakaś pozycja (linii), od tyłu, niebędąca pozycją listy, ani rozdziałem dodatnim równaniowym. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi, książki, rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> gkzezs24r583pqgsyv248s7px327m4q 558945 558944 2026-10-08T15:56:23Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} */ 558945 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, którym znalezienie, czy jest jakaś pozycja (linii), od tyłu, niebędąca pozycją listy, ani rozdziałem dodatnim równaniowym. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi, książki, rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 7ntwwklklc347vu02lpms2kkn7u9w5r 558949 558945 2026-10-08T20:06:18Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558949 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, którym znalezienie, czy jest jakaś pozycja (linii), od tyłu, niebędąca pozycją listy, ani rozdziałem dodatnim równaniowym. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi, książki, rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> m4g4rj9j8ay5g2oul8hybow3m2tl109 558950 558949 2026-10-09T03:01:22Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558950 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, czyli zgłosiła wartość nilową, czyli wtedy nic nie dopasowano, w któreś iteracji znalezienia, lub od razu. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To jest co najwyżej przed spisem treści, lub jakimś {{ZobaczTeż|liczba_start_naglowek}} najbliższym linkowi, książki, rozdziałowi wstecz. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> qg0mtekhk8hnhd9vunvcii4ux5h2lp9 558951 558950 2026-10-09T08:34:17Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558951 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, czyli zgłosiła wartość nilową, czyli wtedy nic nie dopasowano, w któreś iteracji znalezienia, lub od razu. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To {{ZobaczTeż|liczba_start_naglowek}} jest nad spisem treści, lub jakimś najbliższym rozdziałem. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> nx3z58qlo67tdqhx4us8wefz209uiin 558952 558951 2026-10-09T08:35:23Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} */ 558952 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do sprawdzania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, czyli zgłosiła wartość nilową, czyli wtedy nic nie dopasowano, w któreś iteracji znalezienia, lub od razu. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To {{ZobaczTeż|liczba_start_naglowek}} jest nad, spisem treści, lub jakimś najbliższym rozdziałem. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> ovks4vzpdcd1svtuxhssfutkosnld0p 558955 558952 2026-10-09T11:26:31Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} */ 558955 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania, tylko za pierwszym razem, pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do rewidowania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej główniejszych, a dla innych tekst rozdziału musi mieć co najwyżej znaki odstępu. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, czyli zgłosiła wartość nilową, czyli wtedy nic nie dopasowano, w któreś iteracji znalezienia, lub od razu. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To {{ZobaczTeż|liczba_start_naglowek}} jest nad, spisem treści, lub jakimś najbliższym rozdziałem. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 1stgyraqzowe66c8smkz2832bihl4fe 558956 558955 2026-10-09T11:47:37Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} */ 558956 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania, tylko za pierwszym razem, pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do rewidowania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie {{ZobaczTeż|nagłówki pasujące}} dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty, lub on jest coraz bardziej główniejszy: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = Koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej niegłówniejszych, a dla innych jest według {{LinkZobaczTeż|nagłówki pasujące}}, które są zwracane według powyższych wartości, a pozostałe wedłig poniższych. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = Tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, czyli zgłosiła wartość nilową, czyli wtedy nic nie dopasowano, w któreś iteracji znalezienia, lub od razu. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To {{ZobaczTeż|liczba_start_naglowek}} jest nad, spisem treści, lub jakimś najbliższym rozdziałem. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> 9ug64wy4xsn4v0p89ddmv4yqxtz96nz 558957 558956 2026-10-09T11:48:30Z Persino 2851 /* {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} */ 558957 wikitext text/x-wiki <noinclude>{{ProstaStronaStart | nagłówek = {{Podrozdział|{{ld2|StronicowyParser/AnalizaSpisuRzeczy}}|Dokumentacja modułów {{lpg|Lua}} w {{lpr|Lua|Scribunto}}.}}{{Autonawigacja|Pomoc:Spis treści}} | stopka strony = {{StopkaSpisTreści}}{{Podrozdział|Koniec}} }}</noinclude> {{Spis treści}} == {{Śródtytuł|p.AnalizowanieSekcjowe}}{{Code|p.AnalizowanieSekcjowe}} == Jest to funkcja do sprawdzania tekstu zawartości (tekstu rozdziału, bez zawartości nagłówka) napisu wprowadzenia tekstu sekcji, za pomocą funkcji zwracanej, czy ona spełnia pewne określone warunki. Funkcja, gdy co jest nie tak, to zwraca wartość {{Code|true}}, i przy okazji może zerować pewne określone zmienne, jeśli ona przy tym została odpowiednio ustawiona, przeciwnie ona zawsze zwraca wartość {{Code|nil}}, czyli nie zwraca żadnej wartości. Za pomocą tej funkcji można sprawdzić, czy funkcja zawiera niedozwolone znaki wikikodu, i dlatego zwraca tą prawdziwość. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.AnalizowanieSekcjowe(tekst_rozwiniety_calego_artykulu,czy_zeruj,tab_zmienne,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych) return function(liczba_koniec_naglowek,liczba_obiekt_start_nowe) ... ---- ciało funkcji zwracanej end; end; </syntaxhighlight> Parametry ogólne funkcji: {{OpisParametrów | 1 = {{Code|tekst_rozwiniety_calego_artykulu}} | _1 = Jak w: {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}. | 2 = {{Code|czy_zeruj}} {{Patrz|czy_zeruj}} | _2 = Czy ma zerować, ścisle określone zmienne, które mieszczą się w niezerowej tablicy zmiennych składowych, tzn. w: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}}. | 3 = {{Code|tab_zmienne}} {{Patrz|tab_zmienne}} | _3 = Zmienne w nim do zerowania. | 4 = Parametry z sekcji: {{LinkZobaczTeż|Parametry zakodowanego spisu|StronicowyParser/AnalizaSpisuRzeczy}}.| komórka4 = tak }} Parametry funkcji zwracanej dla tekstu rozważanego: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}: {{OpisParametrów | 1 = {{Code|liczba_koniec_naglowek}} {{Patrz|liczba_koniec_naglowek}} | _1 = Numer znaku, po którym coś rozważamy. | 2 = {{Code|liczba_obiekt_start_nowe}} {{Patrz|liczba_obiekt_start_nowe}} | _2 = Numer znaku, przed którym coś rozważamy. }} ; Sprawdzenie spełnienia warunku, przejście do wnętrza tej instrukcji warunkowej{{dk}} Funkcja zwracana sprawdza, czy zmienne: {{Code|liczba_koniec_naglowek}} {{LinkPatrz|liczba_koniec_naglowek}}, i {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, istnieją, i te zmienne sugerują punkty znakowe w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, ale jeżeli te zmienne liczbowe punktów znakowych mają takie wartości, że nie da się znaleźć dla tej zmiennej tekstowej treści pomiędzy nimi, to ta funkcja nie zwraca żadnej wartości, to zachodzi, kiedy nie jest spełniony warunek: <syntaxhighlight lang="lua"> if((liczba_koniec_naglowek)and(liczba_obiekt_start_nowe)and(liczba_koniec_naglowek+1<=liczba_obiekt_start_nowe-1))then </syntaxhighlight> ; Sprawdzenie uzyskanej zmiennej tekstowej, będąca tekstem pomiędzy linkiem, a końcem rozdziału{{dk}} * Liczenie zmiennej tekstowej za pomocą, którą będziemy sprawdzać: : A jeżeli jest jednak tak, tzn. spełniony jest ten warunek, to znajdujemy taki tekst, robi to za pomocą funkcji: {{LzLua|mw.ustring.sub}}, i zapisuje to pod zmienną {{Code|str}} {{Patrz|str}}. * Pierwszy etap analizowania tej zmiennej, czy jest poprawna, tzn. czy nie zwraca żadnej wartości, ale czy się zakańcza: : Ona sprawdza, czy ona jest w cudzysłowach, tzn. czy spełnia warunek: {{Code|<nowiki>^%s*'+(.+)'+%s*$</nowiki>}}, lub czy początek zaczyna się od znaków: {{Code|<nowiki>^[%*#:;<>]+</nowiki>}}, lub czy ten tekst zawiera dozwolone znaki z przedziału: {{Code|<nowiki>^[%s%p%w]*$</nowiki>}} - tzn. czy tekst składa się ze znaków odstępu, interpunkcyjnych, znaków alfanumerycznych lub z dolnym myślników, jeżeli któreś z tych warunków jest spełnione, to funkcja nie zwraca żadnej wartości, ale zatrzymuje się, tzn. zakańcza się, to oznacza, że wszystko jest w porządku. A jeżeli nie spełnione z żadnych z tych warunków, to ona idzie dalej, i robi następne czynności następne, aby sprawdzić dalsze warunki, czy wszystko jest w porządku. ; Sprawdzanie niepustych linii{{dk}} * Sprawdzanie niepustych linii po liniach, ewentualnie składających się ze znaków odstępów: : Funkcja liczy, ile takich linii znalał, zapisuje to pod zmienną {{Code|ile}} {{Patrz|ile}}, jeśli wśród takich linii znalazł linie pasujące do: {{Code|<nowiki>^[%*#;:<>]</nowiki>}}, lub składające się znaków odstępów: {{Code|<nowiki>^%s*$</nowiki>}}, wtedy funkcja to liczy licznikiem: {{Code|ile_punktowanych}} {{Patrz|ile_punktowanych}}. Funkcja w tak wyszukanych liniach, w przeciwnym razie sprawdza, w liniach niepasujących do tych wzorów, czy tam są artykuły (strony) nie z rozważanej danej książki, przy pomocy funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, jeśli są takie elementy, to funkcja dodaje to do licznika: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, aby dodać jeden do licznika, dla każdej takiej linii funkcja sprawdza, czy przynajmniej jeden taki artykuł się znajduje tam, w każdej takiej wykrytej linii. * Jeśli liczba określona przez zmienną: {{Code|ile_punktowanych}} {{LinkPatrz|ile_punktowanych}}, jeżeli jest, co najmniej równa wyszukanym liniom: {{Code|ile}} {{LinkPatrz|ile}}, to funcja się zatrzymuje, i nie zwraca żadnej wartości, czyli wskazuje na powodzenie. * Gdy liczba tego jest mniejsza niż wykrytych linii, to coś jest nie tak, wtedy funkcja nic nie zwraca, tylko idzie dalej. ; Inne operacje w przypadku niestwierdzenia, jak dotąd niepowodzenia przez funkcję, nie ma jeszcze zwróconej wartości {{nobold|{{Code|nil}}}}{{dk}} * Zerowanie się pewnych wartości: ** Funkcja z tak policzonego: {{Code|str}} {{LinkPatrz|str}}, usuwa formy kodów z obiektami {{Code|obiekt}} {{Code|{{=}}}} {{Code|SZABLON}}, a jeżeli znalazł w nim same, wtedy znaki odstępów, to ona nie zwraca żadnej wartości, ale się zakańcza, przeciwnie, sprawdza, czy jest zmienna: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, prawdziwa, a jeśli tak, to elementy zmiennej: {{Code|tab_zmienne}} {{LinkPatrz|tab_zmienne}} są nilowane. Ale niezależnie od wartości: {{Code|czy_zeruj}} {{LinkPatrz|czy_zeruj}}, funkcja wtedy zwraca zawsze wraca wartość {{Code|true}}, czyli ona zwraca to niepowodzenie. ; Elementy tabeli{{dk}} {{nobold|{{Code|tab_zmienne}}}}, są o kluczach{{dk}} {{OpisParametrów | 1 = {{Code|liczba_nie_okladka_artykul}} {{Patrz|liczba_nie_okladka_artykul}} | _1 = Liczba pozycji sekcji wskazująca, czy istnieje pierwszy taki artykuł (nie okładka, nie strona niedozwolona) aktualnej książki, lub bezpośrednio taki artykuł, niekoniecznie tej książki, czy znajduje się bezpośrednio w pozycji sekcji, i tylko sam tam się znajduje. | 2 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{Patrz|liczba_pierwszy_rozdzialowy_artykul}} | _2 = Liczba pozycji sekcji, która wskazuje na pierwszy taki wykryty artykuł, licząc od przodu, który spełnia pewne ścisle określone kryteria, jaki może być w książce. | 3 = Kryteria określone przez te zmienne powyżej są określone przez funkcję: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, tzn. pozycje jakich artykułów zaliczyć do tych zmiennych o tych kluczach. | komórka3 = tak | 4 = {{Code|czy_ten_rozdzial}} {{Patrz|czy_ten_rozdzial}} | _4 = Wartość prawdziwą wskazuje, czy wynilowano zmienne należące do rozważanej tablicy. }} == {{Śródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}{{Code|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}} == Funkcja wyszukuje, od tyłu, kolejne rozdziały (napisy wprowadzenia tekstu), którego tekst rozdziału składa się z samych znaków odstępów, lub jest pusty, albo o poziomie wyższym rozdziałowo, nawet gdy jego tekst rozdziału jednak nie jest pusty. Funkcja jest przerywana po najbliższych niespełniających warunkach. Funkcja zwraca parametry, z ostatniego pasującego dopasowana. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_spac_par,czy_dodatni,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji {{ZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}: {{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 | 3 = {{Code|liczba_start_rozdzial}} {{Patrz|liczba_start_rozdzial}} |_3 = Podczas wyszukiwania od tyłu, do jakiego punktu ma wyszukiwać. | 4 = {{Code|liczba_obiekt_start_nowe}} | _4 = Jak w: {{LinkPatrz|liczba_obiekt_start_nowe}}, wykorzystywane w funkcji: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, do sprawdzania, tylko za pierwszym razem, pomiędzy znakami: końcem wyszukiwanego nagłówka, wraz ze znakiem nowej linii, a tą zmienną, robimy to do rewidowania, czy tekst rozdziału spełnia ściśle określone normy określone przez tą funkcję. To jest to pozycja taka, na jaką wskazuje również pozycja jakaś artykularna, prze którym sprawdzamy tą funkcją tekst. | 5 = {{Code|liczba_obiekt_start_spac_par}} {{Patrz|liczba_obiekt_start_spac_par}} | _5 = Numer znaku, od którego ma wyszukiwać od tytułu pewne linie. | 6 = {{Code|czy_dodatni}} {{Patrz|czy_dodatni}} | _6 = Typ wyszukiwania rozdziałów, tzn. {{LinkZobaczTeż|czy_dodatni}}. | 7 = {{Code|czy_bez_naglowka}} {{Patrz|czy_bez_naglowka}} | _7 = Czy ma wyszukiwać do: {{Code|1}}, od tytułu, a nie do: {{Code|liczba_start_rozdzial}} {{LinkPatrz|liczba_start_rozdzial}}. | 8 = {{Code|AnalizowanieSekcjowe}} {{Patrz|AnalizowanieSekcjowe}} | _8 = To nic innego jest, jak funkcja inicjowana przez zwracaną procedurę przez: {{LinkŚródtytuł|p.AnalizowanieSekcjowe}}, która ma w sobie pewne elementy początkowe w sobie wsadzonych jako parametry, które są wykorzystywane prze obiekt przez nią zwracany, która coś robi. }} ; Typy dopasowywania rozdziałów parametru{{dk}} {{nobold|czy_dodatni {{Code|{{=}}}} {{LinkPatrz|czy_dodatni}} {{ZobaczTeż|czy_dodatni}}}}{{dk}} * {{Code|1}} - wyszukuje rozdziały wskazywane przez funkcję: {{LinkŚródtytuł|p.WprowadzenieTekstuCentrowaneZnacznikowoSzablonowoLubDodatnie|StronicowyParser/AnalizaSpisuRzeczy/Tom IV}}, * {{Code|2}} - wyszukuje pozycje list zaczynające się od znaków: {{Code|<nowiki>[%*#:;<>]+</nowiki>}}, jako pewne rozdziały, które trzeba wyszukać, * Inna wartość niż dwie powyższe - wtedy są wyszukiwane rozdziały niezaczynające się od: {{Code|<nowiki>[^%*#:;<>\n]</nowiki>}}, i kończące się na dwukropek. : Dla dwóch ostatnich powyższych punktów są wyszukiwane linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}. : Funkcja dla tych dwóch pierwszych sprawdza, tylko raz, czy to jest rozdział spisu treści wskazywaną przez funkcję: {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, jeżeli parsowanie przeszło niepomyślnie, a funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, zrzuci wartość prawdziwą, wtedy ta cała funkcja z nagłówka zrzuca wartość logiczną fałszywą. Ta funkcja wykorzystuje wartość: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, jako drugi parametr, dla którego liczy ona tekst przed, ta zmienna może wskazywać na początek pozycji linii artykularnej (z artykułami), aby ona policzyła swoją wartość. Funkcja działa w pętli do zakończenia zasobu danych lub w inny sposób, ale też do zakończenia. Funkcja wtedy robi operacje zawsze dla: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}} równe {{Code|1}} lub dla tych, gdzie: {{LinkŚródtytuł|p.CzyTamElementyNieSpisoweArtykularne|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, zwraca wartość logiczną prawdziwą, własnie dla tego, jeśli ta operacja zwróci prawdę, to dla tego są dopasowywane elementy zwracane. Wtedy wiadomo, że wyszukane tak pozycje są rozdziałami. Funkcja zwraca wyniku w postaci wartości szegu zwracanych: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek_poczt,naglowek,poziom_naglowka,liczba_start_naglowek_dalej,liczba_koniec_naglowek_dalej,naglowek_dalej,poziom_naglowka_dalej; </syntaxhighlight> Wytłumaczenie tych elementów zrzuconych przez nią dla dopasowań, licząc od tyłu: {{OpisParametrów | 1 = Ostanie {{ZobaczTeż|nagłówki pasujące}} dopasowanie nagłówka pasujące, gdy tekst jego rozdziału jest równy znakom odstępu lub jest pusty, lub on jest coraz bardziej główniejszy: | nagłówek1 = tak | 2 = {{Code|liczba_start_naglowek}} | _2 = Początek ostatniego wyszukanego takiego nagłówka. | 3 = {{Code|liczba_koniec_naglowek_poczt}} | _3 = Koniec pierwszego wyszukanego nagłówka. | 4 = {{Code|naglowek}} | _4 = Wartość nagłówka dla tego ostatniego dopasowania. | 5 = {{Code|poziom_naglowka}} | _5 = Poziom takiego nagłówka. | 6 = Według wartości zwracanych powyższych w pierwszej kolejności, dla którego tekst rozdziału nie musi być równy znakom odstępu, dla rozdziałów coraz bardziej niegłówniejszych, a dla innych jest według {{LinkZobaczTeż|nagłówki pasujące}}, które są zwracane według powyższych wartości, a pozostałe według poniższych. | komórka6 = tak | 7 = Niepasujący nagłówek, wyszukane pierwsze z kolei po pasującym: | nagłówek7 = tak | 8 = {{Code|liczba_start_naglowek_dalej}} | _8 = Początek po pasującym tak nagłówku. | 9 = {{Code|liczba_koniec_naglowek_dalej}} | _9 = A tutaj jego koniec. | 10 = {{Code|naglowek_dalej}} | _10 = Wartość tekstu napisu wprowadzenia tekstu. | 11 = {{Code|poziom_naglowek_dalej}} | _11 = Tutaj jego poziom. }} W przypadku nieznalezienia takich nagłówków funkcja nie zwraca niczego. == {{Śródtytuł|p.SzukanieKolejnychSekcji}}{{Code|p.SzukanieKolejnychSekcji}} == Funkcja służy do zaawansowanego szukania, od tyłu, nagłówków w przeciwieństwie do: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, która służy przede wszystkim do szukania sekcji kolejnych jednego rodzaju, a ta funkcja znajduje się w postaci układu sekcji różnego typu w rozważanym tekście. Funkcja wyszukuje od tyłu, znajduje parametry ostatniego nagłówka i je zwraca, jeżeli je znalazł, a jeśli nie, to nie zwraca żadnej wartości, tylko funkcja się zakańcza. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieKolejnychSekcji(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,liczba_obiekt_start_nowe,liczba_obiekt_start_kolei_par,czy_bez_naglowka,AnalizowanieSekcjowe)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = Jedynie funkcja nie ma parametru: {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, ponieważ ta funkcji nie szuka kolejnych rozdziałów tylko jednego rodzaju, lecz wielu. | komórka2 = tak }} === {{Śródtytuł|str_spacja_lub_zerowy_naglowek}}{{Code|str_spacja_lub_zerowy_naglowek}} === Dla każdej takiej niepustej linii, sprawdzane jest, czy to są linie z odstępami, lub czy nie są elementami listy, ale w sposób rozszerzony, tzn. ten początek nie może składać się z pewnych znaków, czyli: {{Code|<nowiki>^[^%*#:;<>\n]</nowiki>}}. Funkcja sprawdza, czy liczba takich linii, jest taka sama, ile jest niepustych linii, wtedy funkcja zwraca wartość logiczną prawdziwą, przeciwnie wartość nilową. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> local str_spacja_lub_zerowy_naglowek=function(tekst)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = {{Code|tekst}} | _1 = Tekst do sprawdzenia. }} === Etapy dopasowania ostatniego dopasowania rozdziałów, jego pozycja w tekście i jego napis wprowadzenia tekstu - Etap ogólny === Funkcja najpierw wyszukuje rozdziały poprzez wskazanie przez funkcję: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, a jeżeli znalazł artykuł, o niepustych secjach pomiędzy ostatnim wskazanym artykułen (przed artykułem), a rozdziałem, wtedy ta funkcja zwraca wartość logiczną fałszywą i zwraca wartość nilową, czyli nic nie zwraca, i funkcja się zakańcza, i wskazuje, że nie znalazł takiego nagłówka, to się dzieje pod warunkiem, że funkcja: {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}, została podana, w przeciwnym wypadku, to już tak się nie dzieje, a nagłówek z tego wywołania mógł być znaleziony, ale nie musi. === Etapy alternatywy instrukcji warunkowej === W funkcji są trzy etapy instrukcji warunkowej: * '''if(...)then ({{nobold|pierwszy etap}}) elseif(...) ({{nobold|drugi etap}}) else ({{nobold|trzeci etap}}) end;'''. ==== Pierwszy etap ==== ; To dotyczy, że znalazł ostatnie dopasowanie, ale niepasującego nagłówka, przed nim, nie ma. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli tego nie znalazł, wtedy przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, w '''pętli nieskończonej''', najpierw dla parametru: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}, najpierw jest to pierwsze, a później to drugie, jeśli z tego pierwszego zostało wykonana komenda przerwania pętli, to drugie dopasowanie nie zostanie wykonane w danym obiegu jego, normalnie, bez tego są dwa wywołania. * W każdym takim wywołaniu i dopasowaniu kolejno do tyłu, w pierwszym, czy drugim, będzie sprawdzane, czy tego dokonano, czy taki nagłówek znaleziono, a jeśli tak, to sprawdzany jest tekst pomiędzy ostatnim końcem w wykrytym nagłówku, a początkiem tego przedostatniego, lub z etapu ogólnego, funkcją: {{LinkŚródtytuł|str_spacja_lub_zerowy_naglowek}}, jeżeli funkcja zwróciła wartość logiczną odpowiadającej fałszywej, to pętla jest przerywana, w przeciwnym wypadku są inicjowane parametry tego dopasowania, które przygotowuje ona zwrócić do funkcji w nagłówku. ; Ogólnie po drugim taki wywołaniu następuje sprawdzenie parametrów zwróconych{{dk}} * Jeżeli w ostatnim takim wywołaniu w tym funkcja zwraca niedopasowanie, wtedy zwracane jest przerywanie pętli, wtedy mamy parametry ostatniego dopasowania, jeśli istnieją takie. ==== Etap drugi ==== ; To dotyczy, że takiego dopasowania pasującego nie znalazł. * Wtedy funkcją: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, znajdowane jest dopasowanie w minimalnie podwójnych cudzysłowach. * A jeżeli to znalazł, to wyszukany stąd nagłówek jest rozwijany przy pomocy funkcji: {{Code|{{sr|#p.AnalizaNapisuWprowadzeniaTekstu|p=StronicowyParser/SpisTreści/Tom I}}}}. * Jeżeli parser funkcji nie wykrył wykrzyknika na końcu takiego nagłówka, wtedy jest sprawdzane przy pomocy iteratora w zakodowanym tekście przy pomocy: {{Code|{{m|Szablonowe}}}}, na podstawie: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, czy w nagłówku istnieją artykuły bieżącej książki, i czy to nie jest okładka, czy strona niedozwolona. * Jeżeli wykryto takie artykuły, lub pętla nie została wykonana, bo nie ma takich wykrytym w nagłówku kodów, to funkcja inicjuje parametry zwracanych wartości przez funkcję w nagłówku. ==== Etap trzeci ==== ; To dotyczy pozostałych przypadków, w którym znalazł ostatnie dopasowanie, a niepasujące przed nim też znalazł. * Jest wywoływane wywołanie: {{LinkŚródtytuł|p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}, najpierw w pierwszym wywołaniu dla: {{Code|czy_dodatni}} {{Code|{{=}}}} {{Code|2}}, a później dla {{Code|3}}. * A w każdym takim wywołaniu jest sprawdzane, czy tekst pomiędzy końcem ostatniego wykrytego nagłówka, a początkiem przedostatniego nagłówka, a nawet artykułu wykrytego, czyli czy taki tekst rozdziału, czy składa się z samych znaków odstępów, a jeśli tak, to inicjowane są parametry zwracane przez funkcję. Dalej przechodzimy z pierwszego do drugiego wywołania, w którym oba wywołania są podobnie zbudowane. === Parametry wychodzące z funkcji === * Oto parametry inicjowane przez funkcję w tych powyższych trzech etapach alternatywnych, które na końcu funkcji w nagłówku są zwracane: Funkcja zwraca wartości określone przez kod: <syntaxhighlight lang="lua"> return liczba_start_naglowek,liczba_koniec_naglowek,naglowek,poziom_naglowka; </syntaxhighlight> === Wytłumaczenia parametrów zwracanych === Parametry określają ostatnie dopasowanie nagłówkowe wewnątrz funkcji: {{OpisParametrów | 1 = {{Code|liczba_start_naglowek}} | _1 = Początek tego dopasowania, | 2 = {{Code|liczba_koniec_naglowek}} | _2 = Jego koniec, | 3 = {{Code|naglowek}} | _3 = Wartość napisu wprowadzenia tekstu nagłówka, | 4 = {{Code|poziom_naglowka}} | _4 = Poziom tego nagłówka. }} == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowych}} == Funkcja służy do wyszukiwania, od tyłu, pozycji artykularnej przed wykrytym ostatnim rozdziałem, lub gdy nie ma rozdziałów, to liczy pozycję tylko artykularną, lub nawet pozycji rozdziałów zerowych spisu treści albo nawet tych z dwukropkiem na końcu danej linii, i szuka od tyłu takie coś, by to uznać za początek spisu treści wyciętej z tekstu zakodowanego spisu, czyli ogólnie mówiąc, funkcja szuka dalej takiego początku dalszego. Funkcja służy też do wydzielania części spisu spełniające powyższe kryteria, aby można było ją parsować przez inne funkcje '''{{ld|StronicowyParser|Stronicowego parsera}}''', do wydzielania dalszych rozdziałów, a z nich wydzielania nagłówków (napisów wprowadzenia tekstu) i tekstów rozdziałów, poprzez zwrócenie w nim wartości pierwszego parametru. Funkcja pętluje przy wykrytych liniach składających się z odstępów, a się zatrzymuje na normalnych danych lub po zakończeniu zasobów. Główny opis funkcji {{ZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}: * Funkcja działa w pętli nieskończonej, aż do zakończenia danych, lub do zwrócenia elementów przez nią, * W tej pętli funkcja wyszukuje kolejne linie, które nie są pozycjami listy, z którego jest wyodrębiona linia, analizowane, jeżeli istnieją. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowych(tekst_rozwiniety_calego_artykulu,nazwa_przestrzeni,nazwa_przestrzeni_ksiazki,nazwa_ksiazki,nazwa_spisu_tresci,pelna_nazwa_spisu_tresci,pelna_nazwa_spisu_tresci_szablonowa,tablica_analizy_obiektow_strony_dany_modul,tablica_danych_parametrow_szablonu_strony,tab_nazwa_spisow_przekierowaniowych,liczba_start_rozdzial,czy_bez_naglowka,liczba_start,czy_dalej_rozdzial,liczba_pierwszy_rozdzialowy_artykul)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{Śródtekst|uchwyt=bez jakich parametrów standardowo|tekst= Funkcja nie przyjmuje parametrów z listy zmiennych podanych w poprzedniej pozycji listy powyżej: {{Code|liczba_obiekt_start_nowe}} {{LinkPatrz|liczba_obiekt_start_nowe}}, {{Code|liczba_obiekt_start_spac_par}} {{LinkPatrz|liczba_obiekt_start_spac_par}}, {{Code|czy_dodatni}} {{LinkPatrz|czy_dodatni}}, i {{Code|AnalizowanieSekcjowe}} {{LinkPatrz|AnalizowanieSekcjowe}}. }}| komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_start}} {{Patrz|liczba_start}} | _4 = Od której pozycji od tyłu ma wyszukiwać pozycje artykularne. | 5 = {{Code|czy_dalej_rozdzial}} {{Patrz|czy_dalej_rozdzial}} | _5 = Czy {{ZobaczTeż|czy_dalej_rozdzial}} uznać za pierwszeństwo, w przypadku wykrytego rozdziału dodatniego w linii, lub nie wykrycia takiej linii, która nie jest częścią listy, wtedy jest ważny element (zmienna) {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie jest brane, coś przeciwnego. | 6 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _6 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}. }} Parametry {{ZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}} zwracane przez funkcję, które są zwracane kolejno w niej na końcu jej działania: {{OpisParametrów | 1 = Ustalony taki punkt, uzyskanym z obliczeń w wyniku pętli (wyjaśnienie w tekście). | komórka1 = tak | 2 = Liczba znaków odstępów wykrytych podczasz wszystkich obiektów pętli (jest to reprezentowane przez: {{Code|liczba_spac}} {{Patrz|liczba_spac}}). | komórka2 = tak | 3 = Czy tak, uzyskana i zwrócona, linia jest rozdziałem spisu treści (jest to reprezentowane przez: {{Code|czy_spis}} {{Patrz|czy_spis}}). | komórka3 = tak }} === Etapy zwracania przez funkcję elementów === * Funkcja przedstawia szereg etapów, jakie ona musi przejść, aby wydzielić nagłówek zerowy przed nim, czy tekst z linkami do artykułów, ale nieokładkowych książki bieżącej. ==== Uzyskanie linii według ogólnego wzoru ==== * Według {{LinkZobaczTeż|p.SzukanieSekcjiLinkowychLiniowych}}, tą linią, byłoby takie coś pomiędzy ewentualnie znakami nowych linii, która spełnia wzór: {{Code|<nowiki>([^%*#:;<>\n][^\n]*)</nowiki>}}. To wyszukiwanie jest według funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wyszukujący w sposób ogólny linie, niezależnie jak są one realizowane w tekście. ==== Początek i koniec uzyskanej linii według powyższego sposobu ==== * Początek i koniec przechwyconej linii, to są pewne liczby, wraz ze znakami nowej linii, jeśli po któreś stronie istnieją, lub nawet gdy to są w tym elementy, początku lub końca, tekstu, wtedy długość tych elementów jest zero. ==== Brak dopasowania linii ==== * A jeżeli dopasowanie tej linii zgłasza niedopasowanie, wtedy przy prawdziwości zmiennej: {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według: {{LinkZobaczTeż|czy_dalej_rozdzial}}, zwracane jest: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przeciwnie, wartość minimalną, pomiędzy tą zmienną a inną {{Code|liczba_pierwszy_rozdzialowy_artykul}} {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}} (jeśli ta zmienna nie istnieje, to domyślnie ma wartość {{Code|1}}). ==== Rozdział równaniowy ==== * Jeżeli tą linią jest rozdział równaniowy, to zwracane jest, jeżeli wartość {{Code|czy_dalej_rozdzial}} {{LinkPatrz|czy_dalej_rozdzial}}, według {{LinkZobaczTeż|czy_dalej_rozdzial}}, ma wartość fałszywą, wtedy jest to dopasowanie końca tej linii, w pierwszym parametrze zwracanym, wraz z innymi danymi, według {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}, a jeżeli ta wartość jest prawdą, to zwracane jest {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, bo w tej funkcji nie ma prawa być takich rozdziałów dopasowywać. Ma dopasowywać tylko normalne linie niebędące pozycjami listy lub rozdziałami równaniowymi. ==== Pierwsze rozgałęzenie specjalne instrukcji warunkowej ==== : Znaki odstępów - linia to białe znaki: * Jeżeli linia istnieje i składa się z samych znaków odstępów, to liczmy długość tych znaków, wraz z nowymi liniami po prawej lub lewej stronie, jeśli istnieją, i wsadzamy to do ogólnego licznika {{Code|liczba_spac}} {{LinkPatrz|liczba_spac}}, która jest zwracana na końcu działania funkcji, jako drugi parametr w: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. Funkcja wykonuje tych okrążeń pętli tyle, ile jest kolejnych linii składających się z tych znaków. ==== Przypadek istnienia linii nie składającej się ze znaków odstępów ==== : Rozdział spisu treści i rozdział zerowy: * Jeśli linia jest spisem względem {{LinkŚródtytuł|p.ParsowanieNapisuWprowadzeniaTekstuSpisuStron|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, przyjmuje wartość początkowi takiej ustalonej linii w tekście, a {{Code|czy_spis}} {{LinkPatrz|czy_spis}} przyjmuje wartość prawdziwą. * A jeśli tak nie jest, to sprawdzamy, czy przed tą linią jest rozdział zerowy na podstawie funkcji: {{LinkŚródtytuł|p.ZnajdowanieZerowegoSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom III}}. Jeżeli ona jest tym rozdziałem, to {{Code|liczba_start}} {{LinkPatrz|liczba_start}} ma już nową wartość, przeciwnie, jeśli ta linia ma na końcu dwukropek, to ta wartość nowa jest równa początkowi wyszukania tej linii, a jeśli nie, to końcowi. Zmienna, czy jest rozdział spisu {{Code|czy_spis}} {{LinkPatrz|czy_spis}} ma wartość prawdziwą, gdy ten rozdział zerowy istnieje, a jeśli nie, to fałszywą. ==== Przypadek istnienia, lub nie, rozdziału zerowego ==== ; Gdy znaleziono taki rozdział zerowy{{dk}} * Jeśli znaleziono taki rozdział (zerowy) - w linii niebieżącej, to: {{Code|liczba_start}} {{LinkPatrz|liczba_start}}, nie zmienia wartości. * Przeciwnie, jeśli znaleziono taki spis w bieżącej linii, to: {{nobold|{{Code|liczba_start}} {{LinkPatrz|liczba_start}}}}, ma wartość początkowi takiej linii. ; Przeciwnie, wtedy przypadek sprawdzania linii w wypadku nieistnienia w nim kodów{{dk}} * Jeśli wyszukana linia jest rozdziałem z dwukropkiem na końcu, to początkowi, a jeśli nie, to końcowi. * Wtedy w przypadku istnienia dwukropka na końcu rozdziału, wtedy ustawiamy: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, jest prawdą, w innym wypadku na fałsz. ; Sytuacja niespełnienia poprzednich warunków{{dk}} * Sprawdzamy, czy linia ma pozycje artykularne, które nie są okładkami lub stronami niedozwolonymi, a jeśli tak jest, na podstawie wywołania funkcji: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}, to zwracany jest początek wyszukania takiej linii, przeciwnie powtarzana jest wartość {{Code|liczba_start}} {{LinkPatrz|liczba_start}}. * Wtedy, gdy linia nie ma takich artykułów i rozdział z dwukropkiem na końcu istnieje, wtedy ustalamy zmienną: {{Code|czy_spis}} {{LinkPatrz|czy_spis}}, na prawdę, w innym wypadku na fałsz. ; Zwracane wartości{{dk}} : Na samym końcu zwracane jest to wszystko w postaci parametrów: {{LinkZobaczTeż|zwracane-p.SzukanieSekcjiLinkowychLiniowych}}. == {{Śródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}{{Code|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} == Funkcja wyszukuje, czy dla obiektu o typie {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} o numerze liczbowym {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}} - nie jako łańcuch znakowy, dla ich uzyskiwanego odpowiednika {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, generowanego z: {{Code|tablica_analizy_obiektow_strony_dany_modul}} {{LinkPatrz|tablica_analizy_obiektow_strony_dany_modul|StronicowyParser/AnalizaSpisuRzeczy}}, są linki w zależności od podanej zmiennej: {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, a jeżeli tam nie ma linków, to przeszukiwany jest: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w ich poszukiwaniu, którymi zrządzą prawa w zależności od przyporządkowanej zmiennej: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, wartość prawdziwa tej zmiennej, włącza dowolność układu obiektów typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. Funkcja sprawdza dany link funkcją: {{LinkŚródtytuł|p.CzyGeneralnieElementSpisuRzeczy|StronicowyParser/AnalizaSpisuRzeczy/Tom II}}. A kolejne obiekty w dalszym tekście: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, są znajdowane dzięki iteratorowi: {{Code|{{sr|#p.IteratorSzablonowyZakodowanegoTekstu|p=Szablonowe}}}}. === Etapy wykonywania czynności === Funkcja patrzy na: {{Code|szablon}} {{LinkPatrz|szablon|StronicowyParser/AnalizaSpisuRzeczy}}, i sprawdza, czy to jest link: * Jeśli tak to zwraca wartość pradziwą. * A jeśli nie, to później robimy to według: {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, w celu wyszukania takiego obiektu, którym jest jakiś pierwszy link. Wykryty sprawdzany obiekt, względem tego poprzedniego - te obiekty nie muszą być linkami, musi spełniać pewną relację, jeśli wartość {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, nie jest prawdziwa, w przeciwnym razie taka relacja nie jest sprawdzana. * Jeśli ta zasada jest nie spełniona, to funkcja zwraca wartość fałszywą. Funkcja zwraca wartość prawdziwą, jeśli wykryto taki pierwszy potwierdzony link, przy spełnionych relacjach, jeśli je trzeba sprawdzić, a jeśli nic nie znalał, to zwraca wartość fałszywą. === Inne elementy dokumentacji === Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieLinkuWeSzablonieOrazDalszymNapisie(obiekt,kod,linia,dalszy_tekst,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,czy_nieoddzielone,czy_wszystkie_linki)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|czy_nieoddzielone}} {{Patrz|czy_nieoddzielone}} | _4 = Czy linki mają być oddzielone interpunkcją, czy odstępami, w przypadu przeciwnym, jeżeli tak nie jest, to funkcja zwraca wartość fałszywą. | 5 = {{Code|czy_wszystkie_linki}} {{Patrz|czy_wszystkie_linki}} | _5 = Czy uwzględniaj wszystkie linki, czy tylko artykuły, nie okładki, (dozwolone), danej książki. | 6 = {{Code|dalszy_tekst}} {{Patrz|dalszy_tekst}} | _6 = Dalszy tekst, do przeszukiwania linkowego. }} Funkcja zwraca wartość logiczną, według praw linkowych tekstu przyporządkowanych zmiennym: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, to jeśli znalazł taki pierwszy link, to zwraca wartość prawdziwą, a jeśli nie, to fałszywą. Jeśli zmienna: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}}, przyjmuje wartość fałszywą, to te rozważane obiekty, muszą być oddzielone pewnymi znakami, tutaj: {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, a jak nie spełniają tego warunku, to funkcja zwraca wartość fałszywą, w innym wypadku dalej liczy i sprawdza. == {{Śródtytuł|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}}{{Code|p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach}} == Funkcja jest rozszerzeniem funkcji: {{LinkŚródtytuł|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} {{Patrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}, dla ustalonych dwóch ostatnich zmiennych, które przyjmują wartość {{Code|true}} (prawdziwą), o nazwach: {{Code|czy_nieoddzielone}} {{LinkPatrz|czy_nieoddzielone}} i {{Code|czy_wszystkie_linki}} {{LinkPatrz|czy_wszystkie_linki}}, dla tej funkcji, mamy już zmienne: {{Code|obiekt}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}} i {{Code|kod}} {{LinkPatrz|kod|StronicowyParser/AnalizaSpisuRzeczy}}, i {{Code|dalszy_tekst}} {{LinkPatrz|dalszy_tekst}}, a funkcja w nagłówku je ustala, w wyniku działania w pętli. Funkcja wyszukuje, od tyłu, w tekście, nabliższej pozycji typu: {{Code|SZABLON}}, {{Code|LINKW}} lub {{Code|LINKZ}}, w danej linii, i zwraca odpowiednio dwie wartości, pozycje wykrytą i wartość logiczną powodzenia, w innym przypadku, pozycję początkową z drugim parametrem fałszem. Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.CzyJestZarejestrowanyLinkWeObiektachOddzielonychZnakamiWePozaSekcjowychLiniowychPozycjach(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_spisowa)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje dodatkowe wartości jako argumenty: | nagłówek3 = tak | 4 = {{Code|liczba_start_rozdzial}} | _4 = Jak w: {{LinkPatrz|liczba_start_rozdzial}}, pozycja wyszukiwania końcowa. | 5 = {{Code|liczba_spisowa}} {{Patrz|liczba_spisowa}} | _5 = Pozycja wyszukiwania początkowa. }} Funkcja wyszukuje najbliższą linię od tyłu z obiektami typu: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}. === Parametry zwracane === ; Pierwszy parametr{{dk}} * Pozycja, w którym taką pozycję określoną przez funkcję znaleziono, drugi parametr wtedy przyjmuje prawdę, jeśli nie znaleziono takiej pozycji, to ta pozycja przymuje wartość początkową, a drugi parametr staje się fałszem, ; Drugi parametr{{dk}} * Czy elementy są odzielone od siebie pewnymi znakami, i czy to są linki artykułów nieokładkowych, czy dozwolonych, i czy obiekty w linii do pierwszego wykrytego linku, czy spełniają relację, wtedy zwraca w drugim parametrze prawdę, w przeciwnym wypadku, nie wykryto takich odpowiednich linków, według wspomnianej funkcji, wtedy zwracony ten parametr będzie fałszem, * Funkcją dokonuje okrążeń peli aż do wyczerpania zasobów, też odpowiadającej fałszowi, lub do wykrycia tych pewnych danych. === Początkowa kolejność wykonywania kodu === Funkcja wyszukuje kolejne linie przy pomocy funkcji: {{LinkŚródtytuł|p.SzukanieNaPodstawieWzoruElementuLinii|StronicowyParser/AnalizaSpisuRzeczy/Tom I}}, wykorzystując, że tekst jest zakodowany, i znajduje one przy pomocy wyrażenia regularnego generowanego przez: {{Code|{{sr|#p.NormaWzoruKodowaniaTekstu|p=Szablonowe}}}}, na podstawie kodu, którego fragment jest napisany tutaj: <syntaxhighlight lang="lua"> local liczba_spisu=liczba_spisowa; local szablonowe_modul=require("Module:Szablonowe"); ---- Ustalenie wzoru kodowania, czyli jest to dowolny kod; local szablon_normy_kodowania_szablonu=szablonowe_modul.NormaWzoruKodowaniaTekstu() while(true)do ---- Wyszukuje dowolną linię według wyrażenia regularnego podanego w kodzie, zawartą całkowicie w linii; local liczba_linki_nierozdzialowe_szablonu,_,przed_tekst,obiekt_szablon,kod_szablon,dalszy_tekst=p.SzukanieNaPodstawieWzoruElementuLinii(tekst_rozwiniety_calego_artykulu,"[^%S\n]*([^\n]-)[^%S\n]*"..szablon_normy_kodowania_szablonu.."([^\n]*)",liczba_spisu,(not czy_bez_naglowka) and liczba_start_rozdzial or 1,true); </syntaxhighlight> === Sprawdzenie poprzez instrukcję warunkową === Fukcja sprawdza, czy dokonano sprawdzenia, jeśli pozytywnie ono przeszło, to musi istnieć zmienna: {{Code|liczba_linki_nierozdzialowe_szablonu}} {{Patrz|liczba_linki_nierozdzialowe_szablonu}}, oraz musi być spełniona alternatywa dwóch warunków: to {{Code|przed_tekst}} {{Patrz|przed_tekst}}, musi być puste lub ma spełniać warunek według wzoru: {{Code|<nowiki>^[%p%s%d%.]*$</nowiki>}}. === Kolejne dalsze kroki === * Jeżeli funkcja nie dopasowała kodu: {{Code|obiekt_szablon}} {{LinkPatrz|obiekt|StronicowyParser/AnalizaSpisuRzeczy}}, do wartości: {{Code|SZABLON}}, {{Code|LINKW}} i {{Code|LINKZ}}, to działa w pętli aż dopasuje je, aż do zakończenia zasobu danych dostępnych w tekście: {{Code|tekst_rozwiniety_calego_artykulu}} {{LinkPatrz|tekst_rozwiniety_calego_artykulu|StronicowyParser/AnalizaSpisuRzeczy}}, jeżeli nie mogła by tego zrobić. * A jeśli je dopasowała, to sprawdza, czy te kody są odpowiednimi obiektami, ewentualnie oddzielonych od siebie znakami {{Code|<nowiki>[%p%s%d%.]*</nowiki>}}, poprzez sprawdzanie funkcją wspomnianą w nagłówku, czyli: {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}}. === Zwracane wartości funkcji === Funkcja ma dwa tryby zwracania wartości. Przypadek sukcesu, gdy znaleziono taki link, w innych przypadkach zwracany jest wynik w przypadku niepowidzenia. ==== Przypadek sukcesu ==== Jeśli ta funkcja {{LinkPatrz|p.SzukanieLinkuWeSzablonieOrazDalszymNapisie}} zwróci wartość prawdziwą, to zwrócone zostaną parametry: <syntaxhighlight lang="lua"> return liczba_linki_nierozdzialowe_szablonu,true; </syntaxhighlight> ==== Sytuacja niepowodzenia znalezienia takiego linku w linii w tekście ==== W innych przypadkach, jeżeli takiego dopasowania nie znalazła, to zwróci ona szereg wartości: <syntaxhighlight lang="lua"> return liczba_spisowa,false; </syntaxhighlight> W tym przypadku wartość {{Code|liczba_spisowa}} {{LinkPatrz|liczba_spisowa}}, to nic innego jak ostatni argument naszej funkcji, czyli w przypadku niepowodzenia dopasowania, zwracana jest wartość ta początkowa, z drugą wartością, że niezaleziono poszukiwanego obiektu. == {{Śródtytuł|p.SzukanieSekcjiLinkowychLiniowychZakresowych}}{{Code|p.SzukanieSekcjiLinkowychLiniowychZakresowych}} == Definicja skrótowa funkcji: <syntaxhighlight lang="lua"> function p.SzukanieSekcjiLinkowychLiniowychZakresowych(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,liczba_start_rozdzial,czy_bez_naglowka,liczba_pierwszy_rozdzialowy_artykul,liczba_przed_rozdzialem,liczba_start_naglowek_przed,czy_znajdz)...end; </syntaxhighlight> Parametry funkcji: {{OpisParametrów | 1 = Funkcja ma takie same parametry, i to samo znaczą, jak w punkcie: {{LinkZobaczTeż|parametry-p.SzukanieSekcjiOTekstowychPustychElementowychPozycjachLinkowych}}. | komórka1 = tak | 2 = {{PobierzŚródtekst|uchwyt=bez jakich parametrów standardowo}} | komórka2 = tak | 3 = Dodatkowo funkcja przyjmuje parametry: | nagłówek3 = tak | 4 = {{Code|liczba_pierwszy_rozdzialowy_artykul}} | _4 = Jak w: {{LinkPatrz|liczba_pierwszy_rozdzialowy_artykul}}, gdyby funkcja szukająca zgłosiła niepowodzenie dopasowania według wzoru, czyli zgłosiła wartość nilową, czyli wtedy nic nie dopasowano, w któreś iteracji znalezienia, lub od razu. | 5 = {{Code|liczba_przed_rozdzialem}} {{Patrz|liczba_przed_rozdzialem}} | _5 = Numer znaku, od którego ma wyszukiwać od tyłu. To {{ZobaczTeż|liczba_start_naglowek}} jest nad, spisem treści, lub jakimś najbliższym rozdziałem. | 6 = {{Code|liczba_start_naglowek_przed}} {{Patrz|liczba_start_naglowek_przed}} | _6 = Numer znaku, od którego dalej rozpoczyna się rozdział jakiś dodatni, przed, jeśli istnieje, ale ta liczba jest co najwyżej nie wyższa niż: {{LinkZobaczTeż|liczba_start_naglowek}}. | 7 = {{Code|czy_znajdz}} {{Patrz|czy_znajdz}} | _7 = Czy znaleziono jakiś link szablonowy, inteligentny, rodzaju: {{Code|SZABLON}}, albo link typu: {{Code|LINKW}}, lub {{Code|LINKZ}}, ale przed: {{LinkZobaczTeż|liczba_start_naglowek}}. }} {{BrClear}} <noinclude><!-- -->{{ProstaStronaKoniec}}<!-- -->{{Kategoria|Opisy funkcji, w Lua w Scribunto, w modułach}}<!-- --></noinclude> g76da55mi90c9hz67qdqpp4eb85af03